2017-02-23 84 views
1

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

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

什么可能是造成这种故障的原因? PS:这是我第一次用laravel

web.php

Route::post('/login', '[email protected]'); 
Route::get('/', '[email protected]'); 

AuthController

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('/'); 
} 

PostController中

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

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

是您的密码保存在数据库中的哈希或可见? – dparoli

+0

密码不被散列。这是纯文本 – Mena

回答

4

在您的用户模型中使用此代码,并且只有在需要时才会自动对密码进行散列处理:

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

后更改密码,所以你必须在数据库中的哈希密码

+0

非常感谢......那段代码起到了魔力。我将学习如何在另一个测试项目中使用make:auth进行身份验证。 – Mena

+0

Im使用替代模型到用户模型,其中一个引用了预先存在的表格,并且在默认用户部分的config/auth.php中定义了模型和替代表格。我如何利用这个新模型的指定方法,因为我的密码还没有被散列? – blamb

+0

如果您发布了一个新问题,请参考这个问题,评论不适合检查您的案例。 – dparoli

0

不知道我理解的工作......但如果你是使用Laravel身份验证(php artisan make:auth),您将不会以纯文本格式存储密码...所以我如果你直接在你的数据库中设置密码,它将无法工作,因为它会检查数据库中的密码字段,并假定它是用一个dbcrypt散列存储的...

因此,如果您使用的是默认身份验证随着laravel,使用注册表格创建您的用户帐户

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

+0

谢谢。我认为问题是密码字段,目前是纯文本。顺便说一下,我没有使用make:auth,因为我遵循laracast教程。如果我能找到它,我会再看看它。下次我将使用make:auth – Mena