在Laravel中使用JWT

时间:2016-02-20 17:21:02

标签: php api laravel jwt

我正在尝试实现一个不错的基于JWT的api,所以我已经阅读了大量有关JWTs及其工作原理的文档,但我无法弄清楚一些事情:< / p>

当用户登录应用时,是否可以通过JWT传递用户详细信息?例如,名称,电子邮件和用户权限。

我是否需要通过JWT传递所有内容?例如,从数据库中获取页面特定数据或获取所有博客帖子或类似的内容。

如何在后端查找用户是否有权执行此操作?如何从令牌中获取用户详细信息?

我在这种情况下使用的是Tymon/JWT-Auth library,这里有一个关于我的应用程序如何运作的示范:

用户向api / authenticate路由发送post请求,该路由将用户登录并返回JWT令牌作为json以及用户详细信息 - 名称,电子邮件和权限。所以从服务器返回的数据如下所示:

{
    "token": "blablabla",
    "user": {
        "email": "testin@test.com",
        "name": "Test User",
        "permissions": [ "can_edit_posts", "can_delete_users" ]
    }
}

JWT存储在名为token的javascript中的全局变量中。用户数据存储在用户对象中。

用户转到我们说的博客页面。此页面向服务器发送GET请求,检索所有帖子:/blogs?token=[THAT_GLOBAL_VARIABLE_HERE] 服务器返回所有帖子的列表。 全局令牌变量使用标头中的Bearer密钥中的任何内容进行更新。

这是正确的做法吗?

1 个答案:

答案 0 :(得分:1)

当用户登录应用时,是否可以通过JWT传递用户详细信息?是。用户模型在令牌内。

如何从令牌中获取用户详细信息? 回答here。您传递令牌并调用authenticate()方法。这将基于令牌返回用户模型。无论是否有JWT,你的代码都是相同的。

简而言之,您以传统方式(基于表单)登录您的应用程序,然后为用户提供令牌。在此标记中是用户模型以及要在其中保存的任何其他数据。从那时起,每个基于JSON的请求都需要该令牌来确定用户请求它。