【问题标题】:Override auth redirection of apis url in laravel with auth passport system使用身份验证护照系统覆盖 laravel 中 apis url 的身份验证重定向
【发布时间】: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 或站点主页。

标签: laravel authentication redirect


【解决方案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); }
猜你喜欢
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 2019-05-21
  • 2017-01-06
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多