笔者使用的框架为laravel,所以将在其基础上安装 Laravel Socialite 扩展包来实现基于 Github 进行登录认证。
一、准备工作
1.安装 Laravel Socialite
composer require laravel/socialite
2.配置 Github 认证
首先登录到 Github 并访问这个页面:https://github.com/settings/developers,点击「New OAuth App」注册一个新 OAuth App:
这里授权回调地址Authorization callback URL,我们先设置为https://www.xxx.com/auth/github/callback,后面可以直接使用。

注册成功之后,即可在跳转后页面看到 Client ID 及 点击Generate a new client secret生成的Client Secret 信息(请妥善保管首次生成的Client Secret):
将新增应用的 Client ID、Client Secret 信息添加到应用根目录下 .env 配置文件中:
GIT_CLIENT_ID=你的 Github 应用 Client ID GIT_CLIENT_SECRET=你的 Github 应用 Client Secret
然后在 config/services.php 配置文件中新增如下配置
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
'client_secret' => env('GITHUB_CLIENT_SECRET'),
'redirect' => env('APP_URL', 'http://localhost').'/auth/github/callback'
],3.数据表
执行下列语句生成 github_users 数据表database文件
php artisan make:migration create_github_users_table
github_users文件 完整内容
Schema::create('github_users', function (Blueprint $table) {
$table->bigId();
$table->unsignedBigInteger('user_id')->default(0);
$table->string('token', 64)->default('')->commit('token');
$table->unsignedInteger('github_id')->default(0)->commit('github ID');
$table->string('name')->default('');
$table->string('email')->default('');
$table->string('avatar')->default('');
$table->string('client_id', 64)->default('')->comment('GITHUB_CLIENT_ID');
$table->timestamps();
});执行下列语句,生成数据表
php artisan migrate
至此,就完成了基于 Github 登录所需的所有准备工作
二、实现基于 Github 进行登录认证
接下来我们来编写基于 Github 的认证逻辑实现代码,我们为其编写路由和控制器。
首先创建一个控制器 /app/Http/Controllers/Account/GithubLoginController.php:
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Laravel\Socialite\Facades\Socialite;
class GithubLoginController extends Controller{
}在 routes/web.php 中注册路由
Route::get('/auth/github/redirect', 'GithubLoginController@redirect');
Route::get('/auth/github/callback', 'GithubLoginController@callback');具体的实现逻辑,更详细的请根据业务场景完善。
function redirect(){
return Socialite::driver('github')->redirect();
}
function callback(){
// 从第三方 OAuth 回调中获取用户信息
$user = Socialite::driver('github')->user();
// 查询或插入数据表github_users
return $user->getNickname();
// OAuth 2.0 providers...
$token = $user->token;
$refreshToken = $user->refreshToken;
$expiresIn = $user->expiresIn;
// OAuth 1.0 providers...
$token = $user->token;
$tokenSecret = $user->tokenSecret;
// All providers...
$user->getId();
$user->getNickname();
$user->getName();
$user->getEmail();
$user->getAvatar();
}至此,我们已经完成了基于 Socialite 提供的第三方 OAuth 服务实现用户登录认证的所有安装配置和逻辑代码编写,接下来我们就可以访问 https://www.xxx.com/auth/github/redirect,点击页面上的授权按钮:

即可获取到github提供的用户基本信息。

至此,已基本阐明了github认证的流程,其余的视图和用户关联逻辑则使用场景可自由定义,你可以直接根据github生成一个新的用户,也可以只保留GitHub信息并要求绑定已有账号。
yufan个人站