如何访问`emails.auth.reminder`中的密码重置令牌?

时间:2014-07-03 06:22:55

标签: php laravel laravel-4

我刚刚开始学习Laravel,我正在关注文档。我知道Laravel使用emails.auth.reminder视图作为电子邮件发送给重置token的用户。在我的emails.auth.reminder中,我提出了以下内容:

Hello Dear User,<br><br>
We have received a request from your account to reset your password at Larblog. Please use the following link to reset your password.<br><br>

{{ URL::to( 'user/resetpassword/' . Session::get('_token') ) }}<br><br>

If it wasn't you who tried to reset the password, simply ignore this email.<br><br>
Thanks,<br>
- Larblog

请注意,我使用Session::get('_token')来访问令牌。这是我正确的做法吗?因为它总是一次又一次地生成相同的令牌。Z7vKMT5ssfzeXsQcVkrYodoRmYnbjH0prdP83jBk。当我使用它来重置密码时,它会显示:Invalid token received。另外,我已经检查了我的数据库的password_reminders表,并且它显示了不同的令牌。当我使用存储在数据库中的令牌时,它可以工作。

那么,在通过电子邮件发送的视图中访问令牌的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

我不确定直接访问密码提醒令牌的方法是什么,但通常是在通过Password :: remind()函数发送电子邮件时,而不是通常的电子邮件功能。使用此时,$ token变量会自动传递到电子邮件视图中,以便您可以使用它。

此功能的一个示例用途是:

Password::remind(Input::only('email'), function ($message)
{
    $message->subject('Password Reset');
});

然后在视图中访问它就像:

To reset your password, complete this form: {{ URL::to('reset', array($token)) }}

答案 1 :(得分:1)

会话中的_token不是密码提醒令牌 - 出于安全原因,它会自动插入the CSRF token

由于我不知道您的表格和模型是什么样的,因此很难确切地说您应该如何获得实际的密码提醒令牌,但它可能是这样的:

$user = User::find($someid);    // first fetch your user
$token = $user->passwordReminder->token; // now get the token

如果您的表格和型号与我的假设不同,请随时更新您的问题,我将很乐意更新我的答案。 :)