laravel5.6 RESTful API系列之整合github登入認證!

Swimly發表於2018-05-25

一個偶然的機會開始學著用laravel寫一些介面玩玩,因為單純的寫無論是vue,react,又或者是react-native,沒有一個可用的介面,寫的再好也沒有成就感。就著自己幾年前小打小鬧學的一點php基礎,於是就準備開始折騰laravel,開始寫一些自己的api介面。

首先,一個完整的api肯定會涉及到使用者系統,而目前最好的使用者系統無非就是藉助那些成熟的平臺來直接獲取使用者資料!例如(QQ,微信,微博,github等等!)由於github在實現的過程相對簡單,沒有QQ一大堆的稽核流程,今天就拿github來玩玩laravel如何接入。

安裝 Socialite

通過 Composer命令安裝:

composer require laravel/socialite
複製程式碼

composer安裝

通過getcomposer.org/獲取安裝包,一步步來就可以了。最後能看到下面的介面就說明成功了!

laravel5.6 RESTful API系列之整合github登入認證!

然後把他註冊到config/app.php中:

'providers' => [
    ...
    Laravel\Socialite\SocialiteServiceProvider::class,
    ...
],
 
'aliases' => [
    ...
    'Socialite' => Laravel\Socialite\Facades\Socialite::class,
    ...
],
複製程式碼

到此Socialite就已經註冊到應用中了,下面我們開始githubapplication註冊!

建立Github應用

首先,你需要一個github賬號,這是毋庸置疑的。登入進去,點選setting>Developer settings>New OAuth App建立github應用

laravel5.6 RESTful API系列之整合github登入認證!
其中Authorization callback URL設定為:http://localhost/api/public/api/auth/github/callback,建立完成之後就可以看到client idclient secret

laravel5.6 RESTful API系列之整合github登入認證!

服務配置

開啟config/services.php,在其中新增github授權資訊:

<?php

return [
    ………………
    /*下面是新增的github授權*/
    'github' => [
        'client_id' => env('GITHUB_CLIENT_ID'),
        'client_secret' => env('GITHUB_CLIENT_SECRET'),
        'redirect' => env('GITHUB_REDIRECT'),
    ],

];

複製程式碼

上面我們沒有直接把授權資訊寫在services裡面,而是寫在了.env檔案中的變數裡面。 接著開啟.env檔案

GITHUB_CLIENT_ID = '*********'
GITHUB_CLIENT_SECRET = '*************************'
GITHUB_REDIRECT = 'http://localhost/api/public/api/auth/github/callback'
複製程式碼

定義路由

routes.php中新增下面的路由(當然,你也可以隨意命名),但是有一點需要注意,這些路由一定需要web中介軟體。具體案例如下:

Route::group(['middleware'=>['web']], function () {
    Route::get('captcha/{config?}', 'AuthController@captcha');
    /*下面就是github認證所需的路由*/
    Route::get('auth/github', 'GithubController@redirectToProvider');
    Route::get('auth/github/callback', 'GithubController@handleProviderCallback');
});
複製程式碼

新增控制器

php artisan make:controller GithubController
複製程式碼

GithubController中新增如下方法:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Socialite;
use App\User;

class GithubController extends Controller
{
    public function redirectToProvider()
    {
        return Socialite::driver('github')->redirect();
    }
    public function handleProviderCallback()
    {
        try {
            $user = Socialite::driver('github')->user();
        } catch (Exception $e) {
            return Redirect::to('auth/github');
        }
        return response()->json([
            'data'=>$user
        ]);
 
    }
}

複製程式碼

上面只是實現了,跳轉到github,獲得使用者授權之後再跳轉到上面我們設定的callback地址,並且展示獲取的使用者資訊,至於需要建立使用者需要自己去實現。

到這裡基本上就完了。我們開啟http://localhost/api/public/api/auth/github會自動跳轉到github的登入頁。點選登入的時候並不像我們所想的展示使用者資訊!

laravel5.6 RESTful API系列之整合github登入認證!
而是看到這個錯誤頁面,說實話,寫介面最TM怕這個頁面,這是告訴你,你TM寫的有問題!

解決 cURL Error

  • 首先,下載curl.haxx.se/ca/cacert.p…,然後將catr.pem放到Apachebin目錄下。

  • 開啟php.ini,找到curl.cainfo去掉前面的:,填寫cacert.pem的絕對路徑,如果沒找到請自行新增。

curl.cainfo = "E:\phpStudy\PHPTutorial\Apache\bin\cacert.pem"
複製程式碼
  • 重啟phpstudy

再次開啟http://localhost/api/public/api/auth/github

laravel5.6 RESTful API系列之整合github登入認證!
便能成功獲取到認證的使用者資訊,可以從中抽取需要的資訊儲存到資料庫即可!

由於本人是從事前端開發,可能對laravel瞭解的還不透徹,僅僅獻給那些喜歡折騰的前端朋友們,希望對你們有點幫助!這只是該系列的第一篇文章,後續會發布更多!敬請期待。

github倉庫

github.com/swimly/lara…

相關文章