【问题标题】:custom password reset api in laravel 5.7laravel 5.7中的自定义密码重置api
【发布时间】:2019-03-07 00:28:29
【问题描述】:

默认情况下,通过电子邮件发送到电子邮件的密码重置令牌与保存到数据库的密码重置令牌不同。我已经使用Hasher::make()hash_hmac('sha256', $token, env('APP_KEY')) 对其进行哈希处理,然后将该令牌与数据库进行比较,但没有用。我应该怎么做才能将电子邮件令牌转换为数据库令牌或比较它们? 我也试过了

public function convertToken($token)
    {
        if (Str::startsWith($key = env('APP_KEY'), 'base64:')) {
            $key = base64_decode(substr($key, 7));
        }
        return hash_hmac('sha256', $token, $key);
    }

【问题讨论】:

  • 为什么不使用 laravel 存储库中的样板代码?
  • 你想用这个方法做什么?您是否尝试返回散列值以在电子邮件中发送或返回散列值以与数据库中的值进行比较?
  • @apokryfos 我正在创建用于密码重置的 api。并且样板似乎不适用于restful api,而是使用模板引擎
  • @GeorgeHanson $token 是我从密码重置发送给我的电子邮件中得到的,我认为在执行convertToken($token) 之后,我将能够将该令牌转换为它的内容数据库

标签: laravel bcrypt laravel-5.7 laravel-authentication


【解决方案1】:

Laravel 默认实现使用的Hasher 可以用

检索
$hasher = Password::broker()->getRepository()->getHasher();

然后您可以像这样散列您的令牌以将它们添加到您的数据库中:

$hasher->make($token);

您可以使用以下代码对照存储在数据库中的值检查令牌:

$hasher->check($token, $databaseToken);

但是你为什么要自己实现 Laravel 团队已经做过的事情呢?你最好使用 Laravel 默认身份验证,除非你这样做是为了好玩。

【讨论】:

  • 嗨。样板似乎不适用于restful api,而是使用模板引擎。实际上,我必须获取通过电子邮件发送的令牌并在数据库中找到带有该令牌的条目来验证它。
  • 或发送给我的电子邮件地址仅包含令牌。在这种情况下我应该如何处理 $databasetoken?
  • 您仍然可以使用 Laravel 样板并更改默认控制器以使其匹配您的 RESTful API。它们位于 app/Http/Controllers/Auth
  • @AhmedNawazKhan 由于 Hasher::make() 函数每次都不会给出相同的结果,因此您需要先检索令牌。您可以将令牌关联到一个唯一列以便能够检索它,例如电子邮件(就像 Laravel 所做的那样 github.com/laravel/framework/blob/5.7/src/Illuminate/Auth/…
  • 情况并非如此,因为当您单击发送的电子邮件链接时,如果没有 api,您将被重定向到您必须放置电子邮件和新通行证的页面。所以执行的实际查询是通过电子邮件而不是通过令牌。我可以 api 我们必须通过令牌找到表内的条目
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 2020-07-21
  • 2015-08-10
  • 2018-12-30
  • 2018-01-29
相关资源
最近更新 更多