Laravel使用Socialite实现GitHub登录认证

1、引言

除了让用户走注册流程实现登录认证外,在社交网络日益发达的今天,许多网站还提供了使用社交网络账号实现第三方登录认证的功能。强大的Laravel也为这种功能提供了官方包——Socialite,Socialite目前支持国外多种社交媒体登录,包括Facebook、Twitter、Google、LinkedIn、GitHub以及Bitbucket。因为GFW的缘故,本节我们将简单演示如何通过Socialite使用GitHub进行第三方登录认证。

2、安装Socialite包

要使用Socialite,首先要在Laravel应用根目录执行如下命令加载依赖包:

composer require laravel/socialite

下载完成后接下来我们需要进行一系列的配置。

3、相关配置

首先在config/app.php中将SocialiteServiceProvider注册到providers中:

Laravel\Socialite\SocialiteServiceProvider::class,

为方便使用将Socialite门面添加到aliases中:

'Socialite' => Laravel\Socialite\Facades\Socialite::class,

再然后我们在config/services.php中添加github相关配置信息:

'github' => [
    'client_id' => 'your github app client_id',
    'client_secret' => 'your github app client_secret',
    'redirect' => 'http://laravel.app:8000/auth/github/callback'
]

将client_id和client_secret修改成你自己的github应用对应的client_id和client_secret,如果没有的话需要去GitHub创建一个应用。具体创建方法如下:

创建GitHub应用

访问https://github.com/settings/developers页面,点击“Register new application”,填写表单信息并提交:

创建成功后显示如下:

点击应用名称(本例是LaravelApp)查看应用详情即可获取该应用的Client ID及Client Secret信息。

4、修改AuthController

配置好services.php后接下来我们需要对AuthController做如下修改:

<?php

namespace App\Http\Controllers;

use Socialite;
use App\User;
use Illuminate\Routing\Controller;

class AuthController extends Controller{
    /**
     * 将用户重定向到GitHub认证页面
     */
    public function redirectToProvider()
    {
        return Socialite::driver('github')->redirect();
    }

    /**
     * 从GitHub获取认证用户信息
     */
    public function handleProviderCallback()
    {
        $user = Socialite::driver('github')->user();
        dd($user);
    }
}

5、注册认证路由

最后我们在routes.php中为GitHub登录认证注册路由:

Route::get('auth/github', 'Auth\AuthController@redirectToProvider');
Route::get('auth/github/callback', 'Auth\AuthController@handleProviderCallback');

至此,我们已经完成了所有配置及修改,可以到浏览器进行测试了。

6、使用GitHub进行登录认证
在浏览器地址栏访问http://laravel.app:8000/auth/github,页面会跳转到GitHub授权认证页面:

点击绿色的授权认证按钮,页面会跳转回调页面http://laravel.app:8000/auth/github/callback,并输出用户信息,表明登录成功!

7、保存用户信息到本地数据库

Socialite默认不会保存用户信息到数据库,你可以通过选择保存GitHub用户信息或绑定GitHub账户和本地用户。这里我们配置保存GitHub用户信息到本地数据库。为此我们为users表新增两个字段:github_id和avatar。同时修改AuthController的handleProviderCallback方法如下:

public function handleProviderCallback()
{

    $user = Socialite::driver('github')->user();
   
    if(!User::where('github_id',$user->id)->first()){
        $userModel = new User;
        $userModel->github_id = $user->id;
        $userModel->email = $user->email;
        $userModel->name = $user->name;
        $userModel->avatar = $user->avatar;
        $userModel->save();
    }

    $userInstance = User::where('github_id',$user->id)->firstOrFail();
    Auth::login($userInstance);
    echo $user->name.'登录成功!';
}
这样用户在GitHub授权成功跳转到回调URL后用户信息就会保存到本地数据库。

时间: 2024-09-12 21:10:45

Laravel使用Socialite实现GitHub登录认证的相关文章

[PHP] Laravel 5.1 实现第三方登录认证

Socialite Laravel 提供了简单易用的方式,使用 Laravel Socialite 进行OAuth认证(支持OAuth1 和 OAuth2). Socialite 目前支持的认证有 Facebook.Google.GitLab.Bitbucket.微信.QQ.微博等. Socialite 用法官方文档中已经讲得很详细了,英文好的同学,建议直接看 Laravel 官方文档,英文不好的同学(比如我),下面是中文文档:Laravel 5.0: http://laravel-china.

php的laravel框架快速集成微信登录的方法_php实例

本文面向的是php语言laravel框架的用户,介绍的是基于该框架实现的一个简易集成微信登录的方法.使用方法如下: 1. 安装php_weixin_provider 在项目下运行composer require thirdproviders/weixin,即可完成安装.安装成功后,在项目的vendor目录下应该能看到php_weixin_provider的库文件: 2. 配置微信登录的参数 一共有7个参数可以配置,分别是: client_id:对应公众号创建的应用appid client_sec

php的laravel框架快速集成微信登录的方法

本文面向的是php语言laravel框架的用户,介绍的是基于该框架实现的一个简易集成微信登录的方法.使用方法如下: 1. 安装php_weixin_provider 在项目下运行composer require thirdproviders/weixin,即可完成安装.安装成功后,在项目的vendor目录下应该能看到php_weixin_provider的库文件: 2. 配置微信登录的参数 一共有7个参数可以配置,分别是: client_id:对应公众号创建的应用appid client_sec

Laravel 5框架学习之用户认证_php实例

Laravel 出厂已经带有了用户认证系统,我们来看一下 routes.php,如果删除了,添加上: Route::controllers([ 'auth' => 'Auth\AuthController', 'password' => 'Auth\PasswordController' ]); 可以使用 php artisan route:list 查看一下.浏览器中访问 /auth/login,可以看到登陆界面,最好把系统默认的 app.blade.php 中关于 google 的东西注释

Laravel 5.2 新特性多用户认证功能实现详解

Laravel 5.2新增多用户认证支持,即同时允许不同数据表用户(如前台用户.后台用户)登录认证.下面我们就来简单介绍多用户登录及注册功能实现. 1.生成认证脚手架 首先我们使用Laravel 5.2提供的认证脚手架完成初始化工作: php artisan make:auth 该Artisan命令会生成用户认证所需的路由.视图以及HomeController: 去查看路由文件routes.php,会发现该文件已经被更新: Route::group(['middleware' => 'web']

用户和安全性管理--SQL Server 的登录认证

   对任何企业组织来说,数据的安全性最为重要.安全性主要是指允许那些具有相应的数据访问权限的用户能够登录到SQL Server 并访问数据以及对数据库对象实施各种权限范围内的操作,但是要拒绝所有的非授权用户的非法操作.因此,安全性管理与用户管理是密不可分的.SQL Server 2000 提供了内置的安全性和数据保护,并且这种管理有效而又容易.    本章主要讨论如何创建和管理用户账号,以及如何实现和管理安全性,同时包括很多技巧和注意事项,这些技巧和注意事项将使您的工作更轻松,高效.     

MS SQL基础教程:用户和安全性管理--SQL Server的登录认证

对任何企业组织来说,数据的安全性最为重要.安全性主要是指允许那些具有相应的数据访问权限的用户能够登录到SQL Server 并访问数据以及对数据库对象实施各种权限范围内的操作,但是要拒绝所有的非授权用户的非法操作.因此,安全性管理与用户管理是密不可分的.SQL Server 2000 提供了内置的安全性和数据保护,并且这种管理有效而又容易. 本章主要讨论如何创建和管理用户账号,以及如何实现和管理安全性,同时包括很多技巧和注意事项,这些技巧和注意事项将使您的工作更轻松,高效. SQL Server

Shell批量SSH免交互登录认证

脚本实现功能:批量或单个SSH免交互登录认证 脚本应用场景:当部署集群时,大多数实现要配置好管理节点与从节点的SSH免交互登录,针对这样的情况,写了下面脚本,简化工作. 脚本支持系统:Ubuntu和CentOS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

shiro sessionManager配置登录认证失败

问题描述 shiro sessionManager配置登录认证失败 拿掉配置sessionManager就可以认证成功 我的配置截图 解决方案 http://my.oschina.net/boonya/blog/348149