我试图比较用户输入的字符串和数据库中存储的字符串。我正在检查电子邮件和密码,如果提供了正确的电子邮件密码,则会根据role_type将用户重定向到相应的页面。我有三种角色类型:管理员,用户和员工。我正在使用if语句来检查role_types。但是,控制器不会将我重定向到目标页面。有什么想法吗?
以下是我的代码片段:
routes.php文件
//user login
Route::get('/login', [ 'as' => 'login', 'uses' => 'mainController@login']);
Route::post('/logs_in', 'mainController@logs_in');
//user logout
Route::get('/logout', 'mainController@logout');
//dashoards
Route::get('/admin', [ 'as' => 'admin', 'uses' => 'mainController@admin']);
Route::get('/staff', [ 'as' => 'staff', 'uses' => 'staffController@staff']);
Route::get('/user', [ 'as' => 'user', 'uses' => 'userController@user']);
mainController.php
//user login
public function login(){
return view('login');
}
public function logs_in(Request $request){
$email = $request->input('email');
$password = $request->input('password');
$hashedPassword = User::where('email', $email)->first();
$role_type = User::select('role_type')->where('email', $email)-
>get()->first();
// echo $role_type;
if(Hash::check($password, $hashedPassword->password)){
if($role_type == "Administrator"){
// $request->session()->put('success');
return redirect()->route('admin');
} else if ($role_type == "Staff") {
// $request->session()->put('success');
return redirect()->route('staff');
} else if ($role_type == "User") {
// $request->session()->put('success');
return redirect()->route('user');
};
} else {
return redirect()->route('login')->with('login_error',
'Invalid credentials entered');
};
}
//user logout
public function logout() {
Auth::logout();
return redirect()->route('login')->with('info', 'User logged out
successfully');
}
控制器正在从视图中正确检索信息。问题在于将路由从/ logs_in重定向到相应的用户页面。
答案 0 :(得分:0)
说实话,我会通过中间件而不是控制器完成此操作但是,我相信这与您的路线有关。请看下面我将如何处理它:
Route::get('/admin', 'mainController@admin')->name('admin');
Route::get('/staff', 'staffController@staff')->name('staff');
Route::get('/user', 'userController@user')->name('user');
我只能假设每条命名路线都返回一个视图,因此您应该可以使用上述方法。
进一步示例
所以只是把它打倒在你身上看看:
General AdminController:
class AdminController extends Controller
{
public function index()
{
$name = '';
if($name == 'Option')
{
return redirect()->route('admin');
} else {
return redirect()->route('user');
}
}
public function admin()
{
echo 'Admin Page';
}
public function user()
{
echo 'User Page';
}
}
路线:
Route::get('/', 'AdminController@index');
Route::get('/admin', 'AdminController@admin')->name('admin');
Route::get('/user', 'AdminController@user')->name('user');
正如你所看到的,我的版本是硬编码只是为了给你一个演示..然而,你仍然需要集成userRole检查中间件,以防止用户能够访问他们不应该访问的其他页面能够访问。