【问题标题】:Laravel 5.3 - how to just get the token from the "forgot password" functionality?Laravel 5.3 - 如何从“忘记密码”功能中获取令牌?
【发布时间】:2017-02-25 01:42:27
【问题描述】:

使用 Laravel 5.3,我知道如何更改默认密码重置电子邮件的内容,但这不是我想要的路线。我们的应用程序通过 Mailjet 模板发送所有电子邮件,并且我们设置了特定的特征,因此很容易将电子邮件沿该路线丢弃。因此,为了保持结构有序,我希望密码重置功能按照相同的方式运行。

我需要做的就是从似乎涉及重置密码的众多方法中获取令牌,并且只是获取令牌,然后我可以分别生成电子邮件和链接并通过 Mailjet 发送.

任何人都可以提供的任何指针将不胜感激。

【问题讨论】:

    标签: laravel-5


    【解决方案1】:

    您所说的令牌是在用户填写“忘记密码”字段时生成的。

    令牌位于password_resets 数据库表中。在该表中,您将看到用户的emailtoken。你要获取的token就是那里的token。

    要获取令牌,您可以执行以下查询:

    $pw_reset = \DB::table('password_resets')->where('email', $user->email)->first();
    

    现在,您只需执行$pw_reset->token 即可获取用户的令牌。确保你的表中有记录,否则你会得到一个异常。您可以通过将上面的 ->first() 替换为 ->firstOrFail() 来做到这一点

    这就是您获得密码重置令牌的方式。


    无需用户请求密码重置电子邮件即可生成令牌

    如果您不希望用户填写“忘记密码”字段并请求电子邮件然后获取令牌,您可以手动创建令牌。

    $user = User::find(1) // Get the user with an ID of 1. This can be any user ID
    
    $pw_reset = DB::table('password_resets')->insert(
        ['email' => $user->email, 'token' => str_random(255)]
    );
    

    您将在数据库中插入您的用户令牌,并可以使用 $pw_reset->token 获取最近存储的令牌。

    给你。我为您提供了 2 种方法 将令牌存储 到数据库中,以及 一种 方法从数据库中检索 令牌。

    【讨论】:

    • 感谢您的回答 - 两者都接近我希望实现的目标,但都没有真正击中鼻子。
    • 对不起 - 没有意识到当我按下返回时它会提交。澄清一下,我希望他们必须填写表格才能获得密码重置电子邮件,我希望他们使用内置的忘记密码功能,并且我希望 Laravel 生成代码并将其保存在数据库中。不过,我不希望 Laravel 发送其沼泽标准电子邮件,并且我想让它将相关值(用户、令牌等)传递给我们站点范围的 Mailjet 发送功能。这是否说明了一点?
    • 为了跟进这一点,我最终沿着你的第二条路线走得更远,只是绕过 Laravel 的密码重置功能,而只是使用一个函数来用我生成的值填充密码重置表,而不是挑选 Laravel 的方法 - 我已经接受了你的回答,因为没有它我不会考虑(!)我自己设置密码重置令牌。
    猜你喜欢
    • 2017-06-15
    • 2013-12-09
    • 2011-10-19
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 2017-07-06
    相关资源
    最近更新 更多