使用身份验证护照系统覆盖 laravel 中 apis url 的身份验证重定向
Posted
技术标签:
【中文标题】使用身份验证护照系统覆盖 laravel 中 apis url 的身份验证重定向【英文标题】:Override auth redirection of apis url in laravel with auth passport system 【发布时间】:2018-11-06 01:17:27 【问题描述】:我创建了一些运行良好的 api。现在,当有人点击在 Web 浏览器上获取请求的受保护 api url 时,它会重定向到身份验证系统的登录。如何覆盖此功能?
详细信息
我正在使用 laravel 应用程序,在该应用程序中实施了护照和身份验证系统。到目前为止,该项目还没有任何 Web 界面。 这是我的 api.php
Route::group(['middleware' => ['auth:api'],'namespace' => 'Api', 'prefix' => '/v1'], function ()
Route::get('/user/profile', 'UserController@profile');
Route::get('/logout', 'Auth\LoginController@logout');
);
Route::group(['middleware' => ['api'], 'namespace' => 'Api', 'prefix' => '/v1'], function ()
Route::post('/auth/register', 'Auth\RegisterController@create');
Route::post('/auth/login', 'Auth\LoginController@login');
Route::post('/auth/password/email', 'Auth\ForgotPasswordController@getResetToken');
Route::post('/auth/password/reset', 'Auth\ResetPasswordController@reset');
);
这是我的 web.php
Route::get('/', function ()
return view('welcome');
);
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
当我击球时
site_url/api/v1/user/profile
如果没有在邮递员中传递或使用无效的访问令牌,那么它会返回以下错误(这是可以的)。
"status":"fail","success":0,"error":401,"message":"Invalid Token!"
但是当我在网络浏览器中点击这个网址时,它会将我重定向到登录页面。
【问题讨论】:
那么你想在浏览器中显示什么? 类似 "status":"fail","success":0,"error":401,"message":"Invalid Token!" 或者只是显示未经授权。但不是网页,或者说将来我有主页,然后重定向到网站 url,但 api 不应该受到影响。 不应该,Laravel默认发送到浏览器401请求的登录路由。您只需编辑您的登录页面并编写您想要的任何内容。 因此,正如您在重定向到登录后所说的那样,我可以向他们展示我想要展示的任何内容。比如如果期望 json 则错误,否则 Not Found 或站点主页。 【参考方案1】:我通过将这些函数添加到/app/Exceptions/Handler.php
解决了这个问题:
public function unauthenticated($request, AuthenticationException $exception)
if($request->expectsJson())
return response()->json('Please login',401);
return redirect()->guest('admin/login');
public function unauthorized($request, AuthorizationException $exception)
if($request->expectsJson())
return response()->json("You don't have permission to do this",401);
return redirect()->guest('login');
【讨论】:
浏览器从不默认json! 还有一件事我做了这件事,为什么当有人输入无效令牌时我会发送 401 错误。但我的问题是在浏览器中呢? 我从你的问题中了解到,你想要处理身份验证失败到自定义 url 的重定向,如果是这样,那么这些功能就可以工作,只需将return redirect()->guest('admin/login');
替换为你的自定义路由
我明白我需要做什么。我以前这样做过,但忘记了。无论如何,你给我的想法。
我只要把函数的定义改成这个就行了。受保护的功能未经身份验证($request,AuthenticationException $exception)返回$request->expectsJson()? response()->json(['status' => "fail","success" => 0, "error" => 401, 'message' => trans('response.invalid_token')], 401) :abort (404); 以上是关于使用身份验证护照系统覆盖 laravel 中 apis url 的身份验证重定向的主要内容,如果未能解决你的问题,请参考以下文章
使用外部 Laravel 护照流明 api 进行 Laravel 客户端身份验证