Laravel Eloquent比较字符串

时间:2018-02-23 08:06:16

标签: php laravel laravel-5

我试图比较用户输入的字符串和数据库中存储的字符串。我正在检查电子邮件和密码,如果提供了正确的电子邮件密码,则会根据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重定向到相应的用户页面。

1 个答案:

答案 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检查中间件,以防止用户能够访问他们不应该访问的其他页面能够访问。