【问题标题】:Laravel 4 - Auth::attempt() not working and returns FALSELaravel 4 - Auth::attempt() 不起作用并返回 FALSE
【发布时间】:2014-10-23 09:24:00
【问题描述】:

我已经安装了 Laravel 4.2,但遇到了一个问题,即 'Auth::attempt()' 函数不愿意让用户登录,但我可以使用 'Auth::loginUsingId()' 函数登录。

我的用户模型

<?php

use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;

class User extends Eloquent implements UserInterface, RemindableInterface {

        public $timestamps = false; 
        protected $table = 'user';
        protected $primaryKey = 'user_id';

        protected $hidden = array('user_pass', 'remember_token');

        public function getAuthIdentifier(){
            return $this->getKey();
        }

        public function getAuthPassword(){
            return $this->user_pass;
        }

        public function getRememberToken(){
            return $this->user_remembertoken;
        }

        public function setRememberToken($value){
            $this->user_remembertoken = $value;
        }


        public function getRememberTokenName(){
            return "user_remembertoken";
        }

        public function getReminderEmail(){
            return $this->user_email;
        }
}

我的路线(我已经举了一些例子)

Route::get('login', function(){
        $user = 'dd';
        $pass = '123456';
        $credentials =["user_nickname" => "dd","user_pass" => "123456"];
        if(Auth::attempt($credentials)){
            echo 'Login Successful';
        }
        else{
            echo 'Login Failed';
        }
});

Route::get('check', function()
{
if(Auth::check()){echo 'identified';}
else{echo 'not identified';}
return;
});

Route::get('reg', function()
{
    $user = new User;
    $user->user_nickname = 'dd';
    $user->user_pass = Hash::make('123456');
    $user->user_realname = 'dd';
    $user->user_email = 'test@gmail.com';
    $user->user_accesslevel = 1;
    $user->user_language = 'HU';

    $user->save();
});



Route::get('forcelogin', function()
{
Auth::loginUsingId(6,TRUE);
return;
});

我的数据库

user_id | smaillint
user_nickname | varchar(25)
user_pass | char(60)
user_email | varchar(255)
user_realname | varchar(60)
user_accesslevel | tinyint(3)
user_language | char(2)
user_regdate | timestamp
user_remembertoken | char(60)

【问题讨论】:

  • TIP:请做一个更好的数据库设计,当你有一个表“user”和一个列“id”时,它显然是用户的id,你不必指定为user_id。这同样适用于您提到的每一列。 $user->id 比 $user->user_id 更有意义。

标签: authentication laravel laravel-4


【解决方案1】:

用户密码列必须是“密码”。这是硬编码到 Laravel 中的,不可配置(即使使用 getAuthPassword() 函数)。

所以从

改变你的数据库迁移
user_pass | char(60)

到

password | varchar(60)

改变

$user->user_pass = Hash::make('123456');

到

$user->password = Hash::make('123456');

在注册用户时,它会起作用。

【讨论】:

【解决方案2】:

将用户密码列字段从 char(60) 更改为“varchar 255”删除用户密码哈希重新创建并尝试一下!

【讨论】:

    猜你喜欢
    • 2017-03-31
    • 2013-06-11
    • 2017-05-11
    • 2019-05-24
    • 2014-11-22
    • 1970-01-01
    • 2015-03-03
    • 2014-09-25
    • 2016-09-12
    相关资源
    最近更新 更多