【发布时间】:2018-11-29 22:50:38
【问题描述】:
我正在尝试修改默认的 Laravel 5.6 身份验证,以便通过电子邮件向新用户发送创建密码的链接,因为这是一个仅限邀请的系统,我不想将创建的用户的密码作为纯文本通过电子邮件发送。
在 5.3 中,我能够做的是从 password_resets 表中获取重置令牌,并向他们发送带有“创建密码”按钮的通知。
在 5.6 中(不确定何时更改),它似乎是数据库中密码重置令牌的加密版本。然后我将如何在自定义通知中调用正确的 url 以便用户能够创建密码?
这是我在 5.3 中所拥有的:
控制器
......
$token = strtolower(str_random(64));
DB::table('password_resets')->insert([
'email' => $request->email,
'token' => $token,
'created_at' => Carbon::now()
]);
$user->notify(new UserCreated($user));
......
密码创建电子邮件
.....
$token = DB::table('password_resets')->where('email', $user_email)->pluck('token')->first();
$url = url('/password/reset/' . $token);
......
将相同的代码复制到 5.6,它告诉我我的重置令牌无效。进行正常密码重置时,数据库中的令牌似乎不再与 url 中的令牌匹配。现在它们似乎被加密了?
我已确保电子邮件中的 url 和令牌与数据库中的内容完全匹配,有效期设置为一周(用于测试),并且以这种方式创建的每个令牌都表示无效。
那么您如何为仅限邀请的系统进行身份验证,或者您如何手动创建重置令牌,然后通过自定义电子邮件发送它?文档中提到可以替换密码重置电子邮件,但我不想要,我想补充它。
【问题讨论】:
-
您能否展示您最初是如何执行此操作的代码?
标签: php laravel laravel-authentication