laravel5.6 RESTful API系列之集成github登录认证!

1,263 阅读3分钟

一个偶然的机会开始学着用laravel写一些接口玩玩,因为单纯的写无论是vue,react,又或者是react-native,没有一个可用的接口,写的再好也没有成就感。就着自己几年前小打小闹学的一点php基础,于是就准备开始折腾laravel,开始写一些自己的api接口。

首先,一个完整的api肯定会涉及到用户系统,而目前最好的用户系统无非就是借助那些成熟的平台来直接获取用户数据!例如(QQ,微信,微博,github等等!)由于github在实现的过程相对简单,没有QQ一大堆的审核流程,今天就拿github来玩玩laravel如何接入。

安装 Socialite

通过 Composer命令安装:

composer require laravel/socialite

composer安装

通过getcomposer.org/获取安装包,一步步来就可以了。最后能看到下面的界面就说明成功了!

然后把他注册到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应用

其中Authorization callback URL设置为:http://localhost/api/public/api/auth/github/callback,创建完成之后就可以看到client idclient secret

服务配置

打开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的登录页。点击登录的时候并不像我们所想的展示用户信息!

而是看到这个错误页面,说实话,写接口最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…