Sentinel::authenticate() 不起作用
Sentinel::authenticate() doesn't work
我正在使用 Laravel 5.2,全新安装 Sentinel 2.0,注册工作正常,但尝试登录 returns 用户,但没有设置任何 cookie 或会话或任何内容。
更新1
此时我发现 cookie/session 没有任何保存。我真的不明白为什么不推送 cookie。
AuthController.php
namespace App\Modules\Auth\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class AuthController extends Controller {
public function getLogin() {
return view("Auth::login");
}
public function postLogin(Request $request) {
$credentials = [
'email' => $request->input('login_email'),
'password' => $request->input('login_password'),
];
if (\Sentinel::authenticate($credentials)) {
return redirect('core/dashboard');
}
}
}
\Sentinel::check();
var_dump() 重定向前
object(Cartalyst\Sentinel\Users\EloquentUser)#188 (27) {
["table":protected]=>
string(5) "users"
["fillable":protected]=>
array(5) {
[0]=>
string(5) "email"
[1]=>
string(8) "password"
[2]=>
string(9) "last_name"
[3]=>
string(10) "first_name"
[4]=>
string(11) "permissions"
}
["persistableKey":protected]=>
string(7) "user_id"
["persistableRelationship":protected]=>
string(12) "persistences"
["loginNames":protected]=>
array(1) {
[0]=>
string(5) "email"
}
["connection":protected]=>
NULL
["primaryKey":protected]=>
string(2) "id"
["perPage":protected]=>
int(15)
["incrementing"]=>
bool(true)
["timestamps"]=>
bool(true)
["attributes":protected]=>
array(9) {
["id"]=>
int(1)
["email"]=>
string(25) "test@dev.local"
["password"]=>
string(60) "y$wXHwd6ubbHWWXU9CBI/7AOdDsHY.f7t8b1Kjem0m1ep7Ud.9M/4i6"
["permissions"]=>
NULL
["last_login"]=>
object(Carbon\Carbon)#192 (3) {
["date"]=>
string(26) "2016-01-06 15:15:42.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
有什么可能出错的想法吗?
在 .env
中,会话驱动程序设置为 database
,并且会话 table 在登录后保持为空。也没有设置cookie。
我在 Whosebug 上的另一个答案中找到了答案。需要启用 'web' 中间件.. 叹息
希望他们能在某处记录下来..
有同样的问题。我不得不用网络中间件创建一个路由组
Route::group(['middleware' => 'web'], function() {
Route::get('modules', ['uses' => 'ModuleController@index', 'as' => 'modules']);
Route::get('modules/{name}', ['uses' => 'ModuleController@show', 'as' => 'modules.show']);
Route::post('modules/{module}/publish', ['as' => 'module.publish', 'uses' => 'ModuleController@publish']);
Route::post('modules/{module}/enable', ['as' => 'module.enable', 'uses' => 'ModuleController@enable']);
Route::post('modules/{module}/disable', ['as' => 'module.disable', 'uses' => 'ModuleController@disable']);
});
然后按预期工作。
原因是Sentinel使用了Cookies/Sessions。如果您想使用除 web 之外的另一个中间件组,请确保将这些中间件添加到组中。
我正在使用 Laravel 5.2,全新安装 Sentinel 2.0,注册工作正常,但尝试登录 returns 用户,但没有设置任何 cookie 或会话或任何内容。
更新1
此时我发现 cookie/session 没有任何保存。我真的不明白为什么不推送 cookie。
AuthController.php
namespace App\Modules\Auth\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class AuthController extends Controller {
public function getLogin() {
return view("Auth::login");
}
public function postLogin(Request $request) {
$credentials = [
'email' => $request->input('login_email'),
'password' => $request->input('login_password'),
];
if (\Sentinel::authenticate($credentials)) {
return redirect('core/dashboard');
}
}
}
\Sentinel::check();
var_dump() 重定向前
object(Cartalyst\Sentinel\Users\EloquentUser)#188 (27) {
["table":protected]=>
string(5) "users"
["fillable":protected]=>
array(5) {
[0]=>
string(5) "email"
[1]=>
string(8) "password"
[2]=>
string(9) "last_name"
[3]=>
string(10) "first_name"
[4]=>
string(11) "permissions"
}
["persistableKey":protected]=>
string(7) "user_id"
["persistableRelationship":protected]=>
string(12) "persistences"
["loginNames":protected]=>
array(1) {
[0]=>
string(5) "email"
}
["connection":protected]=>
NULL
["primaryKey":protected]=>
string(2) "id"
["perPage":protected]=>
int(15)
["incrementing"]=>
bool(true)
["timestamps"]=>
bool(true)
["attributes":protected]=>
array(9) {
["id"]=>
int(1)
["email"]=>
string(25) "test@dev.local"
["password"]=>
string(60) "y$wXHwd6ubbHWWXU9CBI/7AOdDsHY.f7t8b1Kjem0m1ep7Ud.9M/4i6"
["permissions"]=>
NULL
["last_login"]=>
object(Carbon\Carbon)#192 (3) {
["date"]=>
string(26) "2016-01-06 15:15:42.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
有什么可能出错的想法吗?
在 .env
中,会话驱动程序设置为 database
,并且会话 table 在登录后保持为空。也没有设置cookie。
我在 Whosebug 上的另一个答案中找到了答案。需要启用 'web' 中间件.. 叹息
希望他们能在某处记录下来..
有同样的问题。我不得不用网络中间件创建一个路由组
Route::group(['middleware' => 'web'], function() {
Route::get('modules', ['uses' => 'ModuleController@index', 'as' => 'modules']);
Route::get('modules/{name}', ['uses' => 'ModuleController@show', 'as' => 'modules.show']);
Route::post('modules/{module}/publish', ['as' => 'module.publish', 'uses' => 'ModuleController@publish']);
Route::post('modules/{module}/enable', ['as' => 'module.enable', 'uses' => 'ModuleController@enable']);
Route::post('modules/{module}/disable', ['as' => 'module.disable', 'uses' => 'ModuleController@disable']);
});
然后按预期工作。
原因是Sentinel使用了Cookies/Sessions。如果您想使用除 web 之外的另一个中间件组,请确保将这些中间件添加到组中。