如果凭据正确,我正在验证我的用户并将其重定向到信息中心。我想保护仪表板路由并添加中间件身份验证,但现在它总是重定向到登录页面。
routes.php文件
Route::get('login', array('uses' => 'HomeController@showLogin'));
Route::post('login', array('uses' => 'HomeController@doLogin'));
Route::get('logout', array('uses' => 'HomeController@doLogout'));
Route::group(['middleware' => 'auth'], function() {
Route::get('/', function () {
return view('dashboard');
});
Route::get('dashboard', function () {
return view('dashboard');
});
});
HomeController.php
public function showLogin(){
return View::make('login');
}
public function doLogin(Request $request){
$rules = array(
'email' => 'required|email',
'password' => 'required|alphaNum|min:3'
);
$validator = Validator::make($request::all(), $rules);
if ($validator->fails()) {
return Redirect::to('login')
->withErrors($validator)
->withRequest($request::except('password'));
}
else {
$userdata = array(
'email' => $request::get('email'),
'password' => $request::get('password')
/*'password' => Hash::make($request::get('password'))*/
);
if (Auth::attempt($userdata)) {
$userid = Auth::id();
return redirect()->intended('/');
} else {
return Redirect::to('login');
}
}
}
public function doLogout()
{
Auth::logout();
return Redirect::to('login');
}
中间件 Authenticate.php
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
}
return $next($request);
}
中间件 RedirectIfAuthenticated.php
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/');
}
return $next($request);
}
答案 0 :(得分:0)
我不确定您的代码无法正常工作,但您可以尝试替换:
if (Auth::attempt($userdata)) {
$userid = Auth::id();
return redirect()->intended('/');
}
使用:
if (Auth::attempt($userdata)) {
$userid = Auth::id();
return redirect('dashboard');
}
来自API Docs of intended method:
为之前预期的位置创建新的重定向响应。
给你一些错误,因为它回到了之前的位置而不是下一个位置。
更新1:
我会采用以下方法。
创建名为UserAlreadyLoggedIn
php artisan make:middleware UserAlreadyLoggedIn
打开UserAlreadyLoggedIn.php
并使用以下代码更新句柄方法:
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(auth()->check()) {
return $next($request);
}
return redirect('login');
}
在app/Http/Kernel.php
数组中的$routeMiddleware
文件中注册:
$routeMiddleware = [
'user_already_logged_in' => \App\Http\Middleware\UserAlreadyLoggedIn::class,
];
通过UserSessionsController
php artisan make:controller UserSessionsController --plain
在UserSessionsController
内放置__constructor
方法:
/**
* Check if the user is already logged in.
*
* @return void
*/
public function __construct()
{
$this->middleware('user_already_logged_in');
}
<强> routes.php文件强>
Route::get('login', 'HomeController@showLogin');
Route::post('login', 'HomeController@doLogin');
Route::get('logout', 'HomeController@doLogout');
// Replace the dashboard code inside the dashboard method..
Route::get('dashboard', 'UserSessionsController@dashboard');
我再次创建了一个名为UserIsAGuest
的中间件,并且已经替换了if
方法中的handle
块:
if(auth()->guest()) {
return $next($request);
}
return redirect('dashboard');
然后在HomeController
&#39; __construct
方法内:
/**
* Check if the user is already logged in.
*
* @return void
*/
public function __construct()
{
// Register the middleware in Kernel.php file
$this->middleware('user_is_guest');
}
希望这会帮助你。快乐的编码。欢呼声。