laravel5.6 RESTful API系列之集成github登陸認證!

一個偶然的機會開始學着用laravel寫一些接口玩玩,由於單純的寫不管是vue,react,又或者是react-native,沒有一個可用的接口,寫的再好也沒有成就感。就着本身幾年前小打小鬧學的一點php基礎,因而就準備開始折騰laravel,開始寫一些本身的api接口。php

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

安裝 Socialite

經過 Composer命令安裝:vue

composer require laravel/socialite
複製代碼

composer安裝

經過getcomposer.org/獲取安裝包,一步步來就能夠了。最後能看到下面的界面就說明成功了!react

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

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

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

建立Github應用

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

其中 Authorization callback URL設置爲: http://localhost/api/public/api/auth/github/callback,建立完成以後就能夠看到 client idclient secret

服務配置

打開config/services.php,在其中添加github受權信息:web

<?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中間件。具體案例以下:json

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的登陸頁。點擊登陸的時候並不像咱們所想的展現用戶信息!

而是看到這個錯誤頁面,說實話,寫接口最 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

便能成功獲取到認證的用戶信息,能夠從中抽取須要的信息存儲到數據庫便可!

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

github倉庫

github.com/swimly/lara…

相關文章
相關標籤/搜索