如何使用 Laravel 5 设置 JWT-Auth

Posted

技术标签:

【中文标题】如何使用 Laravel 5 设置 JWT-Auth【英文标题】:How to set up JWT-Auth with Laravel 5 【发布时间】:2015-09-21 05:04:01 【问题描述】:

对 laravel 来说非常新,我正在用它为 Angularjs 应用程序创建后端 API,现在我被困在身份验证部分。

我决定使用https://github.com/tymondesigns/jwt-auth 来处理身份验证和令牌。

问题是,JWT-Auth 的 wiki 没有告诉我有关如何设置用户数据库的任何信息。它只告诉我我可以像这样进行身份验证

    $token = JWTAuth::attempt($credentials)

当然,在它有地方查找这些凭据之前,它是行不通的。

我该如何做到这一点?

谢谢!

【问题讨论】:

【参考方案1】:

Laravel 5 已经带有 User 模型,如果您已经使用 php artisan migrate 将 User 表迁移到您的数据库(在项目根目录的 .env 文件中设置数据库凭据),那么创建用户很简单.

用户模型的迁移文件也应该已经包含在内。

然后您可以通过制作数据库种子来创建用户,或者直接执行:

User::create(
     [
         'name' => 'you', 
         'email' => 'you@you.com', 
         'password' => Hash::make('secret')
     ]
);

然后您可以使用 JWTAuth 登录,并使用数组中的凭据,例如

['email' => 'you@you.com', 'password' => 'secret']

根据您调用User::create() 的位置,您可能必须包含

use App\User;

在控制器的顶部,其中 App 是您应用的命名空间。 App 是默认命名空间,但您可以轻松地将其更改为您想要的任何名称,它完全是可选的,您不必这样做。只需添加这个,以防你改变它。

编辑:从长远来看,scotch.io 上的这个外部tutorial 可能会为您提供更多帮助。

【讨论】:

知道如何将身份验证从电子邮件和密码对更改为用户名和密码等其他内容。 检查这里:laravel.com/docs/master/authentication#authenticating-users 不确定密码,或者它是否总是检查第二个参数与哈希。没有测试过。 我找不到这个例子。它说“不需要电子邮件”,但没有示例如何将其更改为其他任何内容。 :( 我认为在你的代码中将Auth::attempt(['email' => $email, 'password' => $password]) 更改为Auth::attempt(['username' => $username, 'password' => $password]) 是一个问题,你在哪里验证用户(或者你明白了要点,只需将电子邮件更改为用户名)。来自文档:The password value will be hashed. The other values in the array will be used to find the user in your database table.。我认为在不进行更彻底的更改的情况下更改密码字段是不可能的。最好在 SO 上为此打开一个新问题。 关于如何在身份验证过程中使用不同模型的任何想法?我为应用程序管理员使用默认用户实体,并为将通过 API 使用应用程序的客户创建了具有不同数据库表的其他实体。

以上是关于如何使用 Laravel 5 设置 JWT-Auth的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5.5 中为选定的请求类设置自定义响应

当我按下表格中的按钮时如何设置输入值?这里我使用 laravel 5.8

如何使用 Laravel 5.3 注销并重定向到登录页面?

如何设置 laravel 5.3 注销重定向路径?

Laravel 5.3 将主页设置为登录屏幕

Laravel 5:用户关注其他用户(如twitter) - 如何设置关系