我已经使用laravel auth门面来进行用户验证。当我尝试使用错误的凭据登录时,会生成 Validation Exception (验证异常),并显示给定的数据无效。
LoginController.php
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
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;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function redirectTo()
{
if(auth()->user()->role_id == 3)
return 'home';
else if (auth()->user()->role_id==2)
return 'expert';
return redirect('/logout')->with('error','You dont have User access');
}
}
我希望它重定向到显示错误“ Invalid Credentials”的登录页面。我该怎么办?
答案 0 :(得分:0)
在redirectTo方法中,您必须响应字符串。
public function redirectTo()
{
if(auth()->user()->role_id == 3)
return 'home';
else if (auth()->user()->role_id==2)
return 'expert';
session()->flash('errors', 'Your message')
return 'logout';
}
答案 1 :(得分:0)
在 Laravel 7 上测试过。可以使用函数 redirectTo() 或不使用它。
public function redirectTo()
{
$user = auth()->user();
if($user->role_id == 3) {
return 'home';
} else if ($user->role_id == 2) {
return 'expert';
}
$this->guard()->logout();
throw ValidationException::withMessages([$this->username() => __('You dont have User access.')]);
}
如果你不想使用那个函数,你可以在例如函数 validateLogin 中使用它:
protected function validateLogin(Request $request)
{
$user = User::where('email', $request->email)->first();
if ($user && $user->role_id == 3) {
$this->redirectTo = 'home';
} elseif ($user && $user->role_id == 2) {
$this->redirectTo = 'expert';
} elseif ($user) {
throw ValidationException::withMessages([$this->username() => __('You dont have User access.')]);
}
return $request->validate([
$this->username() => 'required|string',
'password' => 'required|string',
]);
}
或在函数尝试登录中:
protected function attemptLogin(Request $request)
{
$attempt = $this->guard()->attempt(
$this->credentials($request), $request->filled('remember')
);
if (!$attempt) {
return false;
}
$user = $this->guard()->getLastAttempted();
if ($user->role_id == 3) {
$this->redirectTo = 'home';
} elseif ($user->role_id == 2) {
$this->redirectTo = 'expert';
} else {
$this->guard()->logout();
throw ValidationException::withMessages([$this->username() => __('You dont have User access.')]);
}
return true;
}