我有一条受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();
}
}
}
我的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
重定向到/manage
答案 0 :(得分:1)
您可以在中间件
中使用它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'));
更新请更新UR ROUTE或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'));
}
答案 1 :(得分:1)
如果您自己使用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);
}
答案 2 :(得分:0)
你可以简单地使用它,
return Redirect::back();
如果您想使用某些消息或数据重定向,可以使用
return Redirect::back()->with();
在 with()
中,您可以传递任何消息或数据,例如
return Redirect::back()->with('message', 'Success');
这应该用于重定向到以前的位置。 back()
是Laravel辅助函数。此功能使用会话。