2014-05-07 23 views
2

我已經在之前的項目中使用過Sentry 2,但是我無法使用它來使用內置的Auth功能。Laravel 4 AUTH通過AJAX,可能的會話問題

用戶存儲方法:

public function store() 
{ 
    $validation = new Services\Validators\User; 

    if ($validation->passesForStore()) { 
     // Create a new user 
     $user = new User; 
     $user->name  = Input::get('name'); 
     $user->password = Input::get('password'); 
     $user->email = Input::get('email'); 
     $user->save(); 

     // Authenticate the user 
     Auth::loginUsingId($user->id); 

     return JSend::success([ 
      'redirect' => URL::action('[email protected]') 
     ]); 
    } 

    // Provide a custom message for an e-mailaddress that's already in use 
    $message = ''; 
    if ($validation->hasFailed('email', 'unique')) { 
     $message = 'This e-mailaddress has already been taken'; 
    } 

    return JSend::fail([ 
     'failed' => $validation->failedFields(), 
     'message' => $message 
    ]); 
} 

Ajax響應處理程序:

// Redirect to given URL 
if (typeof response.data.redirect != 'undefined') { 
    window.location = response.data.redirect; 
} 

用戶被成功創建,只要頁面是放置Auth::check();後直接loginUsingId結果true但重定向window.locationAuth::check()的結果爲false並且用戶未登錄,即使手動導航到其他頁面也不會。

App.session設置:

'lifetime' => 120, 
'expire_on_close' => true, 

裸記住登錄方法的工作原理類似的方式,但也不管用! (它的工作,而無需使用AJAX的)

=== UPDATE ===

生活剛剛有點怪異。 我現在可以使用我的登錄和註冊方法登錄。 改變了什麼?我爲我的以前的localhost項目添加了一個虛擬主機別名,登錄似乎 工作正常。 (聽起來像是一個環境問題?)。

然而,什麼不工作正在註銷。我爲測試目的創建了以下路線:

Route::get('logout', function(){ 
    Auth::logout(); 
    Session::flush(); 

    dd(Auth::check()); 
}); 

結果如預期的那樣爲false。然而!如果我然後轉到我的登錄頁面,我會重定向。訪問我的其他調試路線下面的結果在true,這絕對使得 根本沒有意義。用戶未使用「記住」標誌登錄。

Route::get('authenticated', function(){ 
    dd(Auth::check()); 
}); 

任何投入在這一點上是高度讚賞:)

===更新2 ===

看來以前成功的嘗試只是一個僥倖。登錄或註銷後,我手動登錄自己不工作..任何方式來調試這種黑魔法?

===更新3 ===

今天,我想我的應用程序一次,並提交了一個無法寫入會話文件XXXX的錯誤。我檢查了我的存儲/會話文件夾,發現沒有這樣的文件存在。

我清空了存儲/會話文件夾,清除了所有緩存,並且奇怪的登錄和退出問題。

即使首要問題是解決了(現在)我還是想找出導致擺在首位

+0

用'location.assign(response.data.redirect)嘗試;'(也許是當前頁面應保存在會話歷史記錄),我不知道 – Razor

+0

正如預期的那樣,這並不能改變什麼。 location.assign(),afaik應該與location.href具有相同的結果。 –

+0

如何使用自定義驗證程序來驗證憑據? – ollieread

回答