Laravel 5.7 Passport保持重定向到登录

问题描述 投票:0回答:2

我想构建一个API端点,它给我一个特定的对象。某些对象是公开可用的,有些对象只能由该对象的所有者查看,直到它们发布该对象为止。

Route::get('jobs/{job}', 'JobController@find')->middleware('auth:api');

JobPolicy应该决定应该发生什么:

public function view(User $user, Job $job)
{
    if (!empty($user)) {
        return $job->user_id === $user->id || $job->job_status_id !== 1;
    }
    return true;
}

这在用户登录时有效。当用户不登录时,这不再起作用。

像这样,->middleware('auth:api')可以防止在未登录时访问该策略。


根据this questionthis doc,我必须能够将策略中的视图方法从view(User $user, Job $job)更改为view(?User $user, Job $job),以便达到我的策略,即使对于未经过身份验证的用户也是如此。

问题是,因为->middleware('auth:api')它不断发送给我app\Exceptions\Handler.php与未经验证的错误。

明确加入?到JobPolicy不是我应该做的唯一事情。


我正在运行PHP 7.2,Laravel 5.7和Laravel Passport 7.2.0。

php laravel http-status-code-403 laravel-passport policy
2个回答
0
投票

我现在正在使用Passport。在Postman标题上添加这个解决了我的问题。希望这对你也有帮助

Key                      Value
===================================
Accept             application/json
Authorization      Bearer {insert_token_login_here}

用户登录时可以生成令牌。这是我的LoginController

$user = $request->user();

$tokenResult = $user->createToken('Personal Access Token');
$token = $tokenResult->token;

  if ($request->remember_me)
   {
        $token->expires_at = Carbon::now()->addWeeks(1);
   }

$token->save();

$message = ['user' => $user,
  'access_token' => $tokenResult->accessToken,
  'token_type' => 'Bearer',
  'expires_at' => Carbon::parse(
   $tokenResult->token->expires_at
  )->toDateTimeString()
];

0
投票

感谢Sanjay Chaudhari发布的简单评论,我解决了!

不使用qazxsw poi确实引起了一个新问题。这样政策将寻找qazxsw poi而不是auth:api。因为我通过令牌进行身份验证,Auth::user()将为空。

我做了一个整体auth()->guard('api')->user(),做了以下事情:

Auth::user()

让我所有与Api相关的控制器扩展ApiController而不是通常的Controller。

© www.soinside.com 2019 - 2024. All rights reserved.