2014-09-24 203 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產生一些混淆。

相關問題