как сделать отдельный логин для админа и других в laravel? - PullRequest
0 голосов
/ 17 января 2020

Мне нужно сделать два разных входа для других пользователей и администраторов. Я сделал два разных контроллера входа в систему. Для администратора я попытался переопределить функцию tryLogin

AdminLoginController. php

 public function attemptLogin(Request $request)
    {

        $this->guard()->attempt(
            $this->credentials($request), $request->filled('remember')
        );
        $user = $this->guard()->user();
        $admin = $user->hasRole('admin');

        if($admin){
            return true;
        }
        else{
            return false;
        }

    }

, но это заставило пользователя войти в систему как для пользователя-администратора, так и для другого пользователя. Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 17 января 2020

Это работает для меня.

public function attemptLogin(Request $request)
    {

        $this->guard()->attempt(
            $this->credentials($request), $request->filled('remember')
        );
        $user = $this->guard()->user();
        $admin = $user->hasRole('admin');

        if($admin){
            return true;
        }
        else{
            $this->guard()->logout();
            return false;
        }

    }
1 голос
/ 17 января 2020

Самый простой способ - определить нового охранника и провайдера в config/auth.php.

    'guards' => [
        'web' => [ // default guard
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],

        'admin' => [
            'driver' => 'session',
            'provider' => 'admin',
        ],
    ],

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],

        'admin' => [
            'driver' => 'eloquent',
            'model' => App\Admin::class,
        ]
    ],

App / Admin. php класс - это ваш класс администратора, а приложение / пользователь. php - это ваш пользовательский красноречивый класс. Этот способ предполагает, что администраторы и пользователи получили отдельную таблицу в базе данных. Конечно, вы также должны использовать Admin Guard в вашем AdminLoginController одним из двух способов:

  • set protected $guard = 'admin';
  • set public function guard(){ Auth::guard('admin'); }
1 голос
/ 17 января 2020

Вы можете проверить это внутри действия входа в систему admin, как указано ниже. Я делюсь кодом, который я использовал в одном из моих проектов. Я надеюсь, что вы можете понять, я также добавил комментарии

public function login(Request $request){
    if(auth()->user()){
        $user = auth()->user()->toArray();
        $role = Role::where('_id', new \MongoDB\BSON\ObjectID($user["role_id"]))->first(); 
        if($role) $role = $role->toArray();
        if(!empty($role)){
            // Prevent other users to enter admin area by checking the role
            if(strtolower($role['name']) != 'admin'){
                Auth::logout();
                \Session::flash('errors', 'You are not authorized to access admin area.' );
                return redirect(url('/admin/login'));   
            }else{
                return redirect(url('/admin')); 
            }


        }else{
            Auth::logout();
            \Session::flash('errors', 'Invalid user role' );
            return redirect(url('/admin/login'));
        }   
    }
    return view('admin/index/login');   
}

Если какие-либо пользователи, кроме администратора, пытаются войти в административную область, проверяя роль, вынуждают их выйти из системы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...