【问题标题】:Laravel 5.6: Reset password link broken?Laravel 5.6:重置密码链接坏了?
【发布时间】:2018-04-09 14:38:14
【问题描述】:

我正在为我的应用程序的忘记密码编写功能,并且可以看到我的password_resets 填充:

CREATE TABLE `password_resets` (
  `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `token` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  KEY `password_resets_email_index` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

与:

ts@test.tes $2y$10$yv1qGOxvamSEmdteK6NNUuDnHmhKUjFQyJBHtOxeYwRiqGSWr936O    2018-04-09 14:03:32

在我的 ResetPasswordController@reset(Request $request) 我有:

 $token = \DB::table('password_resets')->where('token',$request->_token)->first();

另外,当我尝试使用以下位手动执行此操作时,它再次失败,因为 password_resets 表中的令牌已散列:

任何想法都将受到高度赞赏!

更新

/**
     * Reset the given user's password.
     *
     * @param  \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function reset(Request $request)
    {
        $validator = $this->validator($request->all());
        if ($validator->fails()) {
            dd('FAILED');
        }

$token = \DB::table('password_resets')->where('token', $request->get('_token'))->first(); dd($token);

        $message = [
            'title' => trans('passwords.resetTitleSuccess'),
            'description' => trans('passwords.reset'),
            'status' => 'success',
        ];

        return redirect($this->redirectTo)->with('message', $message);
    }

【问题讨论】:

    标签: php laravel authentication


    【解决方案1】:

    更新

    尝试以下方法:

    通过 URL 和电子邮件传递

    代替

    $token = \DB::table('password_resets')->where('token', $request->get('_token'))->first()
    

    这样做

    $reset = DB::table("password_resets")->where('email', $request->email)->firstOrFail();
    if(!$this->hasher->check($request->token, $reset->token))
    

    您的答案在错误消息中。 Laravel 正在您的数据库中寻找 _token 列,而您的列名为 token。将您的输入名称更改为token 并调用$request->token 以访问它。

    【讨论】:

    • 这里的问题是它正在users 表中搜索令牌,而它应该在password_resets 表中发生
    • 你能贴出ResetPasswordController@reset(Request $request)的完整代码
    • 所以,问题是 $request->get('_token') 没有经过哈希处理,这意味着 SQL 查询永远不会像这样成功。
    • 谢谢,$this->validator($request->all()) 是否有可能在 users 表中寻找“_token”?这会先抛出一个 SQL 错误
    • 当你使用 $request->all() laravel 会将输入名称映射到数据库列
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2019-11-26
    • 2013-03-23
    相关资源
    最近更新 更多