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…

相关文章
相关标签/搜索