使用JWT验证来宾/匿名用户

时间:2018-10-05 11:43:22

标签: angularjs authentication jwt anonymous

我正在建立一个SPA,用户可以上传一些文件。前端使用AngularJS编写,而后端使用Laravel 5.7中的API。验证是通过jwt-auth库实现的。

到目前为止,我已经为注册用户实现了此功能,每个用户在服务器上都有一个个人目录,他/她将文件上传到该目录中。注册用户和匿名用户之间的区别在于,匿名用户的文件将在一段时间后删除。

现在,我想对匿名/来宾用户执行相同操作(如果按按钮继续作为来宾)。因此,我首先在authContrroller.php端尝试使用的是这样的内容:

public function authentication(Request $rrequest) {

    $credentials = $request->only('email', 'password');

    // Guest authentication
    if( $credentials['email'] === 'guest' && $credentials['password'] === 'guest' )
    {
        $payload = auth()->factory()->claims(['sub' => $this->createRandomDir()])->make();
        $token = auth()->manager()->encode($payload);

        // OR

        $factory = JWTFactory::customClaims([
            'sub'   => $this->createRandomDir(),
        ]);

        $payload = $factory->make();

        $token = JWTAuth::encode($payload);

    }
    // Registered user authentication authentication
    else
    {
        if (! $token = auth()->setTTL(60)->attempt($credentials))
            return response()->json(['error' => 'invalid_credentials'], 400);
    }


    return response()->json(compact('token'));
}

这个想法是创建一个随机目录,并将其包含在有效负载中,并在下一个请求中使用它。

但是对于来宾,服务器作为令牌返回一个空对象。可能是因为数据库中没有用户。

我正在考虑的另一个想法是创建一个随机用户(将其添加到数据库中),并在每次用户需要将应用程序用作来宾/匿名用户时为其分配一个随机目录。对于这种方法,我唯一担心的是,如果有数千个来宾,则应该在数据库上创建数千个随机用户。

那你怎么看?还有其他更有效的方法来处理此问题吗?

任何想法都受到欢迎。

0 个答案:

没有答案