[英]Laravel If user is not logged redirect to login, after login redirect him to previous route
我有一条受Auth::check()
保护的路由。 因此,如果通过,则用户可以访问它,如果没有通过-用户是redirect()->route('login);
当用户输入其凭据时,我想将其重定向回他尝试实现的路由
我的登录控制器:
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Auth;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
public function __construct()
{
session(['url.intended' => url()->previous()]);
$this->redirectTo = session()->get('url.intended');
$this->middleware('guest')->except('logout');
}
protected function credentials(Request $request)
{
$data = $request->only($this->username(), 'password');
$data['is_active'] = true;
return $data;
}
public function redirectPath()
{
if (method_exists($this, 'redirectTo')) {
return $this->redirectTo();
}
}
}
MY RedirectIfAuthenticated中间件:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/');
}
return $next($request);
}
}
现在可以正常工作了,登录时,用户被重定向回,但是由于这个原因,我以前的功能中断了。 无论如何,如果您已登录并具有角色administrator
或superadministrator
administrator
来重定向到/manage
,我仍然希望如此
您可以在您的中间件中使用它
if (Auth::check() && (Auth::user()->int_role_id == Roles::ROLE_USER)) {
return $next($request);
}else if (!Auth::check() ){
$url = Request()->path();
Session::put('loginRedirect', $url);
return redirect('/login');
}
在您的登录控制器中执行此操作
if(Session::get('loginRedirect')){
$url = Session::get('loginRedirect');
Session::forget('loginRedirect');
return Redirect::intended(url($url));
}
return Redirect::intended(route('user.get_home'));
更新请更新您的路线或URL ...
public function handle($request, Closure $next, $guard = null)
{
if (Auth::check()) {
return $next($request);
}else if (!Auth::check() ){
$url = Request()->path();
Session::put('loginRedirect', $url);
return redirect('YOUR LOGIN ROUTE OR URL');
}
}
登录控制器
public function redirectPath()
{
if(Session::get('loginRedirect')){
$url = Session::get('loginRedirect');
Session::forget('loginRedirect');
return Redirect::intended(url($url));
}
return Redirect::intended(route('YOUR INTENDED URL OR ROUTE after user is logged in'));
}
如果您使用Auth::check()
自己来保护路由,请使用以下命令:
return redirect()->guest(route('login')); // Don't use redirect()->route('login)
而不是redirect()->route('login)
。 然后,在成功登录中,使用:
return redirect()->intended('/home'); // home is the default/fallback url
您可能需要根据路由声明来更改默认网址。
public function handle($request, Closure $next, $guard = null)
{
if (Auth::check() && (Auth::user()->int_role_id == Roles::ROLE_USER)) {
return $next($request);
}
return redirect()->guest(route('login'));
}
在您的App\\Http\\Controllers\\Auth\\LoginController
,只需使用以下命令:
protected $redirectTo = '/home'; // this is default/fallback path
Laravel
使用Illuminate\\Foundation\\Auth\\AuthenticatesUsers::sendLoginResponse
,它使用了intended
方法,因此您无需执行其他任何操作(希望您使用的不是很旧的版本)。
OP
再次编辑后再次更新 在您的RedirectIfAuthenticated
,尝试以下操作:
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
$user = Auth::user();
// Replace the ? marks with appropriate value
if ($user->int_role_id == ? || $user->int_role_id == ?) {
return redirect('/manage');
}
return redirect('/');
}
return $next($request);
}
您可以简单地使用它,
return Redirect::back();
如果您想重定向回一些消息或数据,可以使用
return Redirect::back()->with();
在with()
您可以传递任何消息或数据,例如
return Redirect::back()->with('message', 'Success');
这应该用于重定向到先前的位置。 back()
是Laravel的辅助函数。 此功能利用了会话。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.