无法在 Laravel 中对用户进行身份验证:“用户名或密码无效”


Unable to authenticate a user in Laravel: 'invalid username or password'

我通过 post 请求将用户名和密码从我的视图传递到控制器。负责处理发布请求的控制器:

public function postLogin(Request $request) {
        $this->validate($request, [
            'username' => 'required',
            'password' => 'required'
        ]);
        if (!Auth::attempt([
            'username' => $request['username'],                    
            'password' => $request['password'] ])) { 
            return redirect()->back()->with(['fail' => 'invalid username or password']);      
        }
        return redirect()->route('auth.dashboard');                            
    }

问题是我不断收到"失败"消息:"用户名或密码无效"。

我查看了phpmyadmin内部的表格,用户名和密码非常简单(用户名:Admin和密码:12345)。

这是管理员表的数据库:

class CreateAdminsTable extends Migration
{
    public function up()
    {
        Schema::create('admins', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
            $table->string('username')->unique();
            $table->string('password');
            $table->rememberToken();
        });
    }
    public function down()
    {
        Schema::drop('admins');
    }
} 

作为参考,我正在使用 Laravel 5.2

更新 1:用户是通过注册控制器创建的,该控制器将用户名和密码存储在数据库中。这是控制器:

public function postRegister(Request $request) {
        $admin = new Admin();
        $this->validate($request, [
            'username' => 'required|unique:admins|max:30|min:3',
            'password' => 'required|min:5',
            'password_confirm' => 'required'           
        ]);
        $password = $request['password'];
        $passwordConfirm = $request['password_confirm'];
        if ($password !== $passwordConfirm) {
            return redirect()->back()->with(['fail' => 'password fields do not match!']);
        }     
        $hashedPassword = password_hash($password, PASSWORD_BCRYPT);
        $admin->username = $request['username'];
        $admin->password = $hashedPassword;
        $admin->save();
        return redirect()->route('index')->with(['success' => 'Successfully created account!']);       
    }

我更喜欢使用 Hash::make 而不是 password_hash,因为 Hash::make 中还有一个额外的选项传递给了password_hash。这就是为什么哈希不匹配的原因

你总是在Auth::try中得到false,因为你数据库中的密码不是哈希。首先在数据库中对密码进行哈希处理。您可以使用播种机在数据库中播种

class UserSeeder extends Seeder
{
    public function run()
    {
       //your admin model
       Admin::create([
            'username' => 'admin',
            'password' => Hash::make(123)
       ]);
     }
}

希望这会有所帮助。

请使用以下代码更改登录功能。

public function postLogin(Request $request) {
        $this->validate($request, [
            'username' => 'required',
            'password' => 'required'
        ]);
        if (Auth::attempt([
            'username' => $request['username'],                    
            'password' => $request['password'] ],$remember)) { 
            return redirect()->route('auth.dashboard');            
        }
        return redirect()->back()->with(['fail' => 'invalid username or password']);
    }

注意:这里的$remember应该是1/0或TRUE/FALSE。

希望这对您有所帮助。

>Laravel需要散列密码。因此,如果phpmyadmin中的密码可见,则无法在Laravel中验证它。我希望phpmyadmin中的密码看起来像这样$2y$13$Cn0gwiUfg2mq5Y3/V98aB.NZ4GJqjbwhvKlsSAOYkVNHKlWRmwZ1W