KNEU Provider for laravel/socialite package.
kneu/laravel-socialite-provider is a Laravel package for kneu provider for laravel/socialite package..
It currently has 0 GitHub stars and 118 downloads on Packagist (latest version v2.0.0).
Install it with composer require kneu/laravel-socialite-provider.
Discover more Laravel packages by kneu
or browse all Laravel packages to compare alternatives.
Last updated
KNEU Provider for Laravel Socialite Providers.
Add package to your laravel project via composer
composer require kneu/laravel-socialite-provider
Laravel\Socialite\SocialiteServiceProvider from your providers[] array in config\app.php if you have added it already.\SocialiteProviders\Manager\ServiceProvider::class to your providers[] array in config\app.php.For example:
'providers' => [
...
// remove 'Laravel\Socialite\SocialiteServiceProvider',
\SocialiteProviders\Manager\ServiceProvider::class, // add
];
Add SocialiteProviders\Manager\SocialiteWasCalled event to your listen[] array in <app_name>/Providers/EventServiceProvider.
Add listener '\SocialiteProviders\Kneu\KneuExtendSocialite@handle' to the SocialiteProviders\Manager\SocialiteWasCalled[].
For example:
protected $listen = [
...
\SocialiteProviders\Manager\SocialiteWasCalled::class => [
...
'\SocialiteProviders\Kneu\KneuExtendSocialite@handle',
],
];
config/services.php'kneu' => [
'client_id' => env('KNEU_KEY'),
'client_secret' => env('KNEU_SECRET'),
'redirect' => env('KNEU_REDIRECT_URI')
],
Append provider values to your .env file
KNEU_KEY=your_application_id
KNEU_SECRET=your_secret
KNEU_REDIRECT_URI=https://example.com/login/complete
Next, you are ready to authenticate users via KNEU! You will need tree routes:
Example of Controller
<?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());
}
}
Of course, you will need to define routes to your controller methods:
Route::get('/login', 'Auth\LoginController@login');
Route::get('/login/complete', 'Auth\LoginController@loginComplete');
Route::get('/logout', 'Auth\LoginController@logout');
Once you have a user instance, you can grab a few more details about the user:
$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
See documentation for Laravel Socialite Providers.