knenu/laravel-socialite-provider

laravel/socialite 包的 KNEU 提供器。

v2.0.0 2017-09-10 17:22 UTC

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

更多信息

请参阅Laravel Socialite Providers文档。