- LoginController 之前有這段代碼:
class LoginController extends Controller
{
public function showLoginForm(){
$roles = Role::all();
return view('auth.login', compact('roles'));
}
public function logout(Request $request){
Auth::logout();
$request->session()->flush();
return redirect('/');
}
public function login()
{
$credentials = $this->validate(request(),[
'email' => 'email|required|string',
'password' => 'required|string',
]);
if (Auth::attempt ($credentials)){//auth attemptdevuelve verdadero o falso en caso de que las credenciales correspondan o no
//Inician cambios RDAN
$user = Auth::user();
if($user->userRole() == 'admin') {
return redirect('main');
} else if($user->userRole() == 'externo') {
return redirect('es/user_form');
} else if($user->userRole() == 'profesor') {
return redirect('profesor_site');
} else if($user->userRole() == 'registrador') {
return redirect('select_lang');
} else {
return back()->withErrors(['email' => 'Incorrect user permissions'])
->withInput(request(['email']));
}
//Terminan cambios RDAN
}else{
return back()->withErrors(['email' => 'Incorrect user permissions'])
->withInput(request(['email'])); }
}
}
- 然后我將其更改為:
class LoginController extends Controller
{
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/main';//RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
}
- 在模型用戶中,我有這個角色:
public function roles()
{
return $this->belongsToMany(Role::class,'assigned_roles');
}
public function isAdmin(){
return $this->hasRoles(['admin']);
}
public function hasRoles(array $roles)
{
return $this->roles->contains(fn($role, $key) => in_array($role->name, $roles));
}
public function userRole(){
return $this->role->nombre_rol;
}
通過 LoginController 上的新更改,我對登錄沒有任何問題,但顯然只重定向到主視圖。所以,我想添加重定向視圖取決于角色,但是當我添加public function login()它之前它回傳的錯誤與function userRole()模型用戶。錯誤是
ErrorException 試圖獲取非物件 http://localhost/Servescol2.0.2/public/login 的屬性“nombre_rol”
uj5u.com熱心網友回復:
您不需要重寫該login方法。該login方法當前將呼叫該authenticated方法以查看它是否回傳真正的真實值,然后將其作為回應回傳。您可以覆寫該authenticated方法并讓它根據您的條件回傳您的重定向。
protected function authenticated(Request $request, $user)
{
if ($user->hasRoles(['admin'])) {
return redirect('main');
}
...
}
該錯誤是由嘗試訪問不存在的屬性/關系引起的,它回傳null:
$this->role
用戶屬于許多角色,因此有多個角色而不是一個角色。
您可以有一種方法來檢查單個角色:
public function hasRole($role)
{
return $this->roles->contains('name', $role);
}
然后你可以調整你的條件:
if ($user->hasRole('admin')) {
或者改用以下hasRoles方法:
if ($user->hasRoles(['admin']) {
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/406304.html
標籤:
