This package provides a Socialite service that can be used to log in using MediaWiki's OAuth extension.
composer require taavi/laravel-socialite-mediawiki
Add the following to config/services.php
:
return [
'mediawiki' => [
'identifier' => env('MEDIAWIKI_OAUTH_CLIENT_ID'), // oauth client id
'secret' => env('MEDIAWIKI_OAUTH_CLIENT_SECRET'), // oauth client secret
'callback_uri' => env('MEDIAWIKI_OAUTH_CALLBACK_URL'), // redirect url
'base_url' => env('MEDIAWIKI_OAUTH_BASE_URL'), // base url of wiki, for example https://meta.wikimedia.org
],
];
MEDIAWIKI_OAUTH_CLIENT_ID=
MEDIAWIKI_OAUTH_CLIENT_SECRET=
MEDIAWIKI_OAUTH_CALLBACK_URL=
MEDIAWIKI_OAUTH_BASE_URL=
class OauthLoginController extends Controller
{
public function __construct()
{
$this->middleware('guest')->only(['login', 'callback']);
$this->middleware('auth')->only('logout');
}
public function login()
{
return Socialite::driver('wiki')
->redirect();
}
public function callback()
{
$socialiteUser = Socialite::driver('wiki')->user();
$user = User::firstOrCreate([
'username' => $socialiteUser->name,
]);
Auth::login($user, false);
return redirect()->intended('/');
}
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->invalidate();
return redirect('/');
}
private function guard()
{
return Auth::guard();
}
}