【发布时间】:2020-08-08 15:52:15
【问题描述】:
我在 Laravel 和基本身份验证中实现了护照身份验证。 我有 UserController 在里面,我有构造方法:
public function __construct()
{
$this->middleware('auth.basic.once')->except(['index', 'show']);
$this->middleware('auth:api')->except(['index', 'show']);
}
OnceBasic 中间件:
public function handle($request, Closure $next)
{
if(Auth::guard('api')->check())
return $next($request);
else
return Auth::onceBasic() ?: $next($request);
}
在OnceBasic 中间件中,我能够检查用户是否使用auth:api 进行了身份验证,然后我阻止身份验证尝试使用onceBasic,因此在使用访问令牌时它可以正常工作。但是在尝试使用 onceBasic(email, password) 进行身份验证时失败,因为 auth:api 也尝试进行身份验证并且它失败了(尝试在默认 \App\Http\Middleware\Authenticate.php 中调用 redirectTo() 方法)
我的问题是有没有办法同时使用这两个中间件,只成功验证一个而阻止另一个工作?
【问题讨论】:
-
Web 和 api 调用不应使用相同的路由。
-
API 的两个中间件,用户可以使用 API 生成他们的个人访问令牌,我没有网络或用户界面 @Tpojka
-
我想,您希望在注册路线上有某种客人。因此,您在期待客人的端点上不需要任何“身份验证”中间件。
-
我正在为教育目的进行一些测试,所以我正在尝试应用逻辑:用户可以使用他们的凭据或他们的访问令牌对同一路由进行身份验证。 @Tpojka
-
@Tpojka 我成功应用了这个逻辑的一半,如果用户拥有有效的访问令牌,则跳过对其身份的身份验证。
标签: php laravel authentication middleware laravel-passport