我已經在之前的項目中使用過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.location
,Auth::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的錯誤。我檢查了我的存儲/會話文件夾,發現沒有這樣的文件存在。
我清空了存儲/會話文件夾,清除了所有緩存,並且奇怪的登錄和退出問題。
即使首要問題是解決了(現在)我還是想找出導致擺在首位
用'location.assign(response.data.redirect)嘗試;'(也許是當前頁面應保存在會話歷史記錄),我不知道 – Razor
正如預期的那樣,這並不能改變什麼。 location.assign(),afaik應該與location.href具有相同的結果。 –
如何使用自定義驗證程序來驗證憑據? – ollieread