Php 在Laravel中使用多个防护时,在注册/登录后设置默认防护
我正在从事一个LaravelAPI项目,其中用户的表有一个类型为student或company的列 为了验证这两种类型的用户并限制对某些路由的访问,我使用相同的驱动程序(JWT)和提供者(用户)设置了两个防护 在控制器的登录和注册方法中,我从用户选择其角色(学生或公司)的表单中访问用户类型的值 访问用户类型的目的是将该值传递给auth()方法,auth()方法反过来使用该值通过特定的保护登录用户 问题是:我必须在每个控制器方法中使用该请求(类型),只要需要身份验证,并且需要使用与auth()相关的方法。e、 g jwt respondwithtoken()方法 我想要的是:我想要一种机制,在用户成功登录后动态设置防护,并且我应该能够使用auth()方法,而无需向其传递任何参数Php 在Laravel中使用多个防护时,在注册/登录后设置默认防护,php,laravel,api,jwt,Php,Laravel,Api,Jwt,我正在从事一个LaravelAPI项目,其中用户的表有一个类型为student或company的列 为了验证这两种类型的用户并限制对某些路由的访问,我使用相同的驱动程序(JWT)和提供者(用户)设置了两个防护 在控制器的登录和注册方法中,我从用户选择其角色(学生或公司)的表单中访问用户类型的值 访问用户类型的目的是将该值传递给auth()方法,auth()方法反过来使用该值通过特定的保护登录用户 问题是:我必须在每个控制器方法中使用该请求(类型),只要需要身份验证,并且需要使用与auth()相关
// shoulduseguarddynamically(request('type'));
另外,请确认当我有多类型用户的单表时,以这种方式使用防护是正确的方法 首先,你的方法不是很安全——只要修改“类型”,你就可以进入不该去的地方 你最好用大门而不是警卫,
您可以在这里的文档中查看它们:+Christophe使用gate“代替”警卫或“带”警卫?因为我不这么认为,大门是守卫的替代品。警卫用于身份验证,而大门用于授权。由于您使用的是相同的模型和相同的身份验证,因此您实际上不需要使用不同的警卫。如果允许您的用户访问某个资源,那么使用Gates将能够控制
public function register(){
$user= $this->create(request()->all());
$token=auth(request('type'))->login($user);
return $this->respondWithToken($token);
}
protected function respondWithToken($token)
{
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth(request('type'))->factory()->getTTL() * 60
]);
}
// shoulduseguarddynamically(request('type'));