2014-09-24 173 views
0

Auth :: check()在Auth:attempt()成功后失败。我只是遵循laracast.com教程进行简单认证。这个具体教程https://laracasts.com/series/laravel-from-scratch/episodes/15。所以要么在4到5版本之间做一个小小的改动,要么就是在做一些错误的改动。laravel Auth :: check()失败

这是一个验证功能,第二个验证功能。他们两人都在同一班。

public function store() 
{ 
    $credentials = Input::only('user_displayname'); 
    $credentials['password'] = Input::get('user_password'); 

    if (Auth::attempt($credentials)) 
    { 
     return Auth::user(); 
    } 

    return 'not logged'; 
} 

public function status() 
{ 
    return dd(Auth::check()); 
} 

这是用户模式:

class User extends Eloquent implements UserInterface, RemindableInterface { 

    use UserTrait, RemindableTrait; 

    protected $table = 'user'; 

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

    protected $fillable = ['user_displayname', 'user_fname', 'user_lname', 'user_email',  'user_password']; 

    public $errors; 

    public static $rules = array(
     'user_displayname' => 'required|unique:user,user_displayName', 
     'user_fname' => 'required', 
     'user_lname' => 'required', 
     'user_email' => 'required|unique:user,user_email', 
     'user_password' => 'required' 
    ); 


    public function isValid($data) 
    { 
     $validation = Validator::make($data, static::$rules); 

     if ($validation->passes()) return true; 

     $this->errors = $validation->messages(); 
    } 

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

} 

第二个问题。认证是使用laravel Sessions还是完全不同的事情?

编辑:

验证是否有租约时间或任何类似的时间到了之后只是删除会话?另外我的数据库列“updated_at”和“created_at”与计算机相比给出了错误的时间。所以我在考虑Auth是否正在检查某些时候,有可能因为时间错误而导致它总是失败。

P.S已经在stackoverflow中查看了其他解决方案。

谢谢

+0

看起来更像是一个会话问题。要回答第二个问题 - 使用,身份验证使用Laravel会话。 – Laurence 2014-09-25 03:35:41

+0

是你的id列'id'或'user_id' - 查看你的代码我猜你称它为'user_id'?它应该是'id' – Laurence 2014-09-25 04:27:13

+0

我开始认为会话配置可能存在问题。除了会话生命周期之外是否还有更多设置可以测试?我试着改变“config/session.php”的生命周期,没有影响。还尝试将user_id更改为id。也没有。 – DasBoot 2014-09-25 15:12:01

回答

1

看起来像Auth :: attemp();的参数。是在有效尝试使用此。

public function store() 
{ 
    $credentials = array('user_displayname'=>Input::get('user_displayname'), 
         'user_password'=> Input::get('user_password')); 
    if (Auth::attempt($credentials)) 
    { 
     return Auth::user(); 
    } 

    return 'not logged'; 
} 
+0

不,事实并非如此,你的例子是错误的。阅读此:http://stackoverflow.com/questions/26002552/laravel-4-custom-named-password-column#26002831 – 2014-09-26 10:20:15

1

我觉得Laravel有一个bug。如果您使用Auth ::尝试验证您的凭证,则返回true并“销毁会话”。所以我们重定向我们的URL并使用Auth :: check(),所以它的返回值为false。因为会话被破坏,你丢失了你的数据来检查。

0

我看到你已经从这里移动了,但另一点是laravel是非常严格的保持你的数据库表复数(用户)和模型单数(用户)。我看到你在模型中明确声明了表格是用户,但可能会与laravel产生一些混淆。