【问题标题】:auth attempt failing in Laravel 5.4Laravel 5.4 中的身份验证尝试失败
【发布时间】:2017-02-23 17:53:37
【问题描述】:

我有一些关于身份验证尝试失败的帖子,但我的情况似乎有所不同。仍处于开发阶段,所以我的密码是纯文本的。我尝试登录,但我不断收到错误消息,因此被重定向回登录页面。

错误消息显示用户名/密码不匹配,但 dd 显示电子邮件和密码均正确。

什么可能导致此失败? PS:这是我第一次使用 laravel

web.php

Route::post('/login', 'AuthController@authenticate');
Route::get('/', 'PostController@index');

授权控制器

public function auth()
{
    //dd($request);

    // attempt to login the user
    if (! auth()->attempt(request(['email', 'password']))) {

        return back()->withErrors([
            'message' => 'Username/Password does not macth'
        ]);
    }

    return redirect('/');
}

后控制器

public function index()
{
    $posts = Post::latest()->limit(3)->get();

    return view('post.index', compact('posts'));
}

【问题讨论】:

  • 您保存的密码在数据库中有哈希还是可见?
  • 密码没有经过哈希处理。它是纯文本

标签: laravel-5


【解决方案1】:

在您的用户模型中使用此代码,密码将仅在需要时自动散列:

public function setPasswordAttribute($value)
{
    if( \Hash::needsRehash($value) ) {
        $value = \Hash::make($value);
    }
    $this->attributes['password'] = $value;
} 

然后更改您的密码,这样您就可以在数据库中获得哈希密码

【讨论】:

  • 非常感谢...那段代码起到了神奇的作用。我将学习如何在另一个测试项目中使用 make:auth 进行身份验证。
  • 我正在使用用户模型的替代模型,它引用预先存在的表,并且在默认用户部分的 config/auth.php 中定义了模型和替代表。由于我的密码尚未散列,我将如何在该新模型上利用此指定方法?
  • 如果你发布一个新问题会更好,参考这个问题,cmets 不适合检查你的案例。
【解决方案2】:

不确定我是否理解...但是如果您使用 Laravel 身份验证 (php artisan make:auth),您将不会以纯文本形式存储密码...因此,如果您直接在数据库中设置密码,则不会工作,因为它将检查数据库中的密码字段,并假设它与 dbcrypt 哈希一起存储......

所以如果你使用的是 laravel 自带的默认身份验证,请使用注册表单来创建你的用户帐户

由于这是您第一次使用 laravel,我建议您查看 https://laracasts.com/series/laravel-from-scratch-2017/episodes/17,因为它涵盖了身份验证概念并为您提供了设置用户身份验证的快速演练

【讨论】:

  • 谢谢。我认为问题在于当前为纯文本的密码字段。顺便说一句,我没有使用 make:auth ,因为我正在关注 laracast 教程。如果我能找到它,我会再研究一下。下次我将使用 make:auth
猜你喜欢
  • 2014-05-29
  • 2014-07-05
  • 1970-01-01
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多