Laravel 项目如何实现 GitHub 登录

为了让用户更好的使用网站,简化用户注册流程,很多网站都支持第三方登录,包括微信、QQ、微博、Github等,本文以我的个人网站为例,介绍如何在 laravel 项目中实现 github 登录。

 

安装 laravel 扩展包

Laravel 已提供 laravel/socialite 解决社会化登录问题,使用起来也非常简单,但是仅支持一些国外的应用,比 Facebook、 Twitter、 LinkedIn、 Google、GitHub 和 Bitbucke等,对微信、QQ、微博等国内的一些应用并不支持,但幸运的是安正超大神已开源了支持国内应用的 Laravel 扩展包 overtrue/laravel-socialite。我们就使用 overtrue/laravel-socialite 来实现 Github 登录。

安装

通过 Composer 将 overtrue/laravel-socialite 包添加到你的项目依赖里面:

composer require "overtrue/laravel-socialite:~2.0"

配置

安装 overtrue/laravel-socialite 完以后,在你的 config/app.php 文件中注册 Laravel\Socialite\SocialiteServiceProvider 。

'providers' => [
    // Other service providers...
    Overtrue\LaravelSocialite\ServiceProvider::class,
],

同时,在你的 app 配置文件中,把 Socialite facade 加入到 aliases 数组中 .

‘Socialite’ => Laravel\Socialite\Facades\Socialite::class,

使用 laravel-socialite 前,需要先添加上应用程序所使用的 OAuth 服务的凭证。这些凭据应该放在你的 config/services.php 文件中,并且使用 facebook , twitter , linkedin , google , github 或 bitbucket 作为键名,具体取决于在你的应用中由哪个程序来提供验证服务,比如:

'github' => [
    'client_id' => 'your-github-app-id',
    'client_secret' => 'your-github-app-secret',
    'redirect' => 'http://your-callback-url',
],

 

Github 申请应用

要实现 Github 登录,我需要到 Github 上为网站申请应用,点击链接到申请页面:

以我的个人网站为例做选项说明:

  1. 应用名称(Application name):遇见偶然
  2. 应用主页地址(Homepage URL):laravel.zlong.xin
  3. 应用描述(Application decription):我的个人博客
  4. 授权回调地址(Authorization callback URL):laravel.zlong.xin/github/callback

点击 Register application 按钮后会看到如下页面:

实现 Github 登录

我们需要两个路由:一个重定向用户到 Github 授权,另一个在 Github 验证之后接收回调,路由如下:

// 第三方登录
Route::get('/oauth/github', 'Auth\LoginController@redirectToProvider');
Route::get('/oauth/github/callback', 'Auth\LoginController@handleProviderCallback');

接下来给 LoginController 控制添加两个方法,redirectToProvider 方法重定向到 Github 授权页面,handleProviderCallback 方法在 Github 验证之后接收回调,代码如下:

 public function redirectToProvider()
    {
        return Socialite::driver('github')->redirect();
    }

    public function handleProviderCallback()
    {
        $github_user = Socialite::driver('github')->user();

        $user=User::where('github_name',$github_user->name)->first();
       dd($user);
    }

原文链接:http://blog.jstm365.com/article/19

 

0

发表评论

电子邮件地址不会被公开。