knenu / laravel-socialite-provider
laravel/socialite 包的 KNEU 提供器。
v2.0.0
2017-09-10 17:22 UTC
Requires
This package is auto-updated.
Last update: 2024-09-20 10:50:08 UTC
README
KNEU 提供器,用于Laravel Socialite Providers。
安装
1. Composer
通过 composer 将包添加到您的 Laravel 项目中
composer require kneu/laravel-socialite-provider
2. 添加服务提供器
- 如果已经添加,请从
config\app.php中的providers[]数组中移除Laravel\Socialite\SocialiteServiceProvider。 - 将
\SocialiteProviders\Manager\ServiceProvider::class添加到config\app.php中的providers[]数组。
例如
'providers' => [ ... // remove 'Laravel\Socialite\SocialiteServiceProvider', \SocialiteProviders\Manager\ServiceProvider::class, // add ];
3. 添加事件和监听器
-
将
SocialiteProviders\Manager\SocialiteWasCalled事件添加到<app_name>/Providers/EventServiceProvider中的listen[]数组。 -
将监听器
'\SocialiteProviders\Kneu\KneuExtendSocialite@handle'添加到SocialiteProviders\Manager\SocialiteWasCalled[]。
例如
protected $listen = [ ... \SocialiteProviders\Manager\SocialiteWasCalled::class => [ ... '\SocialiteProviders\Kneu\KneuExtendSocialite@handle', ], ];
3. 添加配置到 config/services.php
'kneu' => [
'client_id' => env('KNEU_KEY'),
'client_secret' => env('KNEU_SECRET'),
'redirect' => env('KNEU_REDIRECT_URI')
],
4. 环境变量
将提供器值追加到您的 .env 文件
KNEU_KEY=your_application_id
KNEU_SECRET=your_secret
KNEU_REDIRECT_URI=https://example.com/login/complete
基本用法
接下来,您就可以通过 KNEU 验证用户了!您需要三个路由
- 第一个用于将用户重定向到 KNEU OAuth 提供程序
- 第二个用于在身份验证后接收来自 KNEU 提供程序的回调
- 第三个用于注销。
控制器示例
<?php namespace App\Http\Controllers\Auth; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use App\Http\Controllers\Controller; use App\User; use Laravel\Socialite\Facades\Socialite; use SocialiteProviders\Manager\OAuth2\User as KneuUser; class LoginController extends Controller { /** * Where to redirect users after login. * * @var string */ protected $redirectTo = '/'; public function __construct() { $this->middleware('guest', ['except' => 'logout']); } /** * @return \SocialiteProviders\Kneu\Provider */ protected function getProvider() { return Socialite::with('kneu'); } public function login(Request $request) { $request->session()->put('url.intended', url()->previous()); return $this->getProvider()->redirect(); } public function loginComplete() { /** @var KneuUser $kneuUser */ $kneuUser = $this->getProvider()->user(); $user = User::withTrashed()->find($kneuUser->id); if(!$user) { $user = new User(); } $user->fill($kneuUser->getRaw()); $user->trashed() ? $user->restore() : $user->touch(); Auth::login($user); return redirect()->intended($this->redirectTo); } public function logout(Request $request) { Auth::logout(); $request->session()->flush(); $request->session()->regenerate(); return $this->getProvider()->logoutRedirect(url()->previous()); } }
当然,您需要定义到控制器方法的路由
Route::get('/login', 'Auth\LoginController@login'); Route::get('/login/complete', 'Auth\LoginController@loginComplete'); Route::get('/logout', 'Auth\LoginController@logout');
检索用户详情
一旦您有了用户实例,您可以获取更多关于用户的信息
$user = Socialite::driver('kneu')->user(); // OAuth Two Providers $token = $user->token; $refreshToken = $user->refreshToken; // currently not provided by auth.kneu.edu.ua $expiresIn = $user->expiresIn; $user->id; $user->name; $user->email; $user->type; // enum ['student', 'teacher', 'simple'] $user->first_name; $user->middle_name; $user->last_name; $user->teacher_id; $user->department_id; $user->student_id; $user->group_id; $user->sex; // only for student, but not always correct