带自定义登录控制器的 Laravel Passport

Kel*_*vin 5 oauth laravel laravel-5 laravel-passport laravel-5.4

正如laravel-passport中提到的,登录控制器是由我们的路由器制成的php artisan make:auth,并且在我们的路由器中web.php会有Auth::routes();

我们的简单代码client-site

Route::get('/redirect', function () {

    $query = http_build_query([
        'client_id' => 'client-id',
        'redirect_uri' => 'http://client-site/callback-responses-url',
        'response_type' => 'code',
        'scope' => ''
    ]);

    return redirect('http://server-site/oauth/authorize?'.$query);
});
Run Code Online (Sandbox Code Playgroud)

如果用户未登录,http://server-site/oauth/authorize?'.$query将被重定向到http://server-site/login

无论如何,我想将登录控制器重定向到我的自定义登录控制器。然后,在我完成检查后,如果为真,将显示有关的视图authorization request agreement

只是我尝试检查oauth/authorize,但没有找到任何函数或控制器处理该链接。如果再给一次机会的话。我想知道更多关于laravel-passportoauth 如何工作的信息,所以我custom authorization view也可以在用户登录后进行操作

任何帮助都会非常有帮助谢谢(:

Kel*_*vin 1

在我在 Laravel Passport 中进行了大量搜索后,我得到了如何自定义 Laravel Passport 的解决方案。

你的里面app\Exception\Handler.php有一个代码

protected function unauthenticated($request, AuthenticationException $exception)
{
    if ($request->expectsJson()) {
        return response()->json(['error' => 'Unauthenticated.'], 401);
    }

    //return redirect()->guest(route('login'));
    return redirect()->guest(route('accountLogin')); // change this part to your login router
}
Run Code Online (Sandbox Code Playgroud)

然后在您的login controller成功登录处理程序中添加此代码

if(session("url")["intended"] != null){
    $redirect = session("url")["intended"];
}else{
    $redirect = "/home";
}

return Redirect($redirect);
Run Code Online (Sandbox Code Playgroud)

该代码用于重定向回客户端页面。AuthenticatesUsers当然,如果您对它们的工作原理有更多了解vendor\laravel\framework\src\Illuminate\Foundation\Auth,您就可以构建自己的漂亮代码。

我发现的最后一步在这里:RouteRegistarar这是关于如何跨越路由授权的。

到目前为止,我还没有自定义我的授权页面。目前我正在编写一个漂亮的third party代码,以便客户端可以轻松使用它。

这就是我所知道的关于 Laravel Passport 自定义登录页面的全部信息