Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel中使用多个防护时,在注册/登录后设置默认防护_Php_Laravel_Api_Jwt - Fatal编程技术网

Php 在Laravel中使用多个防护时,在注册/登录后设置默认防护

Php 在Laravel中使用多个防护时,在注册/登录后设置默认防护,php,laravel,api,jwt,Php,Laravel,Api,Jwt,我正在从事一个LaravelAPI项目,其中用户的表有一个类型为student或company的列 为了验证这两种类型的用户并限制对某些路由的访问,我使用相同的驱动程序(JWT)和提供者(用户)设置了两个防护 在控制器的登录和注册方法中,我从用户选择其角色(学生或公司)的表单中访问用户类型的值 访问用户类型的目的是将该值传递给auth()方法,auth()方法反过来使用该值通过特定的保护登录用户 问题是:我必须在每个控制器方法中使用该请求(类型),只要需要身份验证,并且需要使用与auth()相关

我正在从事一个LaravelAPI项目,其中用户的表有一个类型为student或company的列

为了验证这两种类型的用户并限制对某些路由的访问,我使用相同的驱动程序(JWT)和提供者(用户)设置了两个防护

在控制器的登录和注册方法中,我从用户选择其角色(学生或公司)的表单中访问用户类型的值

访问用户类型的目的是将该值传递给auth()方法,auth()方法反过来使用该值通过特定的保护登录用户

问题是:我必须在每个控制器方法中使用该请求(类型),只要需要身份验证,并且需要使用与auth()相关的方法。e、 g jwt respondwithtoken()方法

我想要的是:我想要一种机制,在用户成功登录后动态设置防护,并且我应该能够使用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'));