Laravel Логин и перенаправление в зависимости от идентификатора роли - PullRequest
0 голосов
/ 21 января 2020

Итак, у меня есть страница входа, которую администратор или пользователи могут использовать для входа. Все шло хорошо до тех пор, пока мы не внесли некоторые изменения и не добавили админскую часть. Я использую только 1 таблицу для всех типов пользователей, и у меня есть столбец role_id, который определяет роль пользователей. Поэтому, если role_id равно 0, я должен перенаправить их на страницу панели инструментов, тогда как, если это пользователь, будет перенаправлен на страницу пользователя. Я пробовал как то, что предлагается в inte rnet, но не могу заставить его работать. Вот что у меня есть:

class UserLoginController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest:user')->except('logout');
    }

    public function showLoginForm()
    {
        return view('auth.user-login');
    }

    public function login(UserLoginRequest $request)
    {
        // Attempt to log the user in
        if (Auth::guard('user')->attempt(['email' => $request->email, 'password' => $request->password])) {
            // if successful, then redirect to their intended location
            return redirect()->intended(route('user.dashboard'));
        }

        // if unsuccessful, then redirect back to the login with the form data
        if (! User::where('email', $request->email)->where('password', bcrypt($request->password))->first() ) {
            return redirect()->back()
                ->withInput($request->only('email'))
                ->withErrors(['status' =>  'Incorrect username or password.']);
        }
    }
    public function logout()
    {
        Auth::guard('user')->logout();
        return redirect()->route('user.login');
    }
}

config / auth

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

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

    'guest' => [
        'driver' => 'session',
        'provider' => 'guests',
    ],

    'user' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
],

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

    'guests' => [
        'driver' => 'eloquent',
        'model' => App\Guest::class,
    ],

],

МОДЕЛЬ

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    protected $guard = 'user';

    protected $fillable = [
        //fillable cols
    ];

    //change role id data type to integer
    protected $casts = [
        'role_id' => 'integer',
    ];
}

Сейчас, где я должен вставить условие, чтобы проверить, администратор это или пользователь?

Ответы [ 2 ]

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

Вы можете попробовать

public function login(UserLoginRequest $request)
    {
        // Attempt to log the user in
        if (!Auth::guard('user')->attempt(['email' => $request->email, 'password' => $request->password])) {
            return redirect()->back()
                ->withInput($request->only('email'))
                ->withErrors(['status' =>  'Incorrect username or password.']);
        }

        $user = Auth::guard('user')->user();
        if ($user->role_id === 0) {
            return redirect()->route('user.dashboard');
        }
        return redirect()->route('user.page'); 
    }
0 голосов
/ 21 января 2020

Проверьте ниже, я редактировал метод входа в систему:

public function login(UserLoginRequest $request)
    {
        // Attempt to log the user in
        if (Auth::guard('user')->attempt(['email' => $request->email, 'password' => $request->password])) {
        // Over here this condition will be true when user is successfully login 
       // Below is the user data i have printed in that you can check the role of user which is login.
         $user = Auth::user();
          print_r($user);

        }

        // if unsuccessful, then redirect back to the login with the form data
        if (! User::where('email', $request->email)->where('password', bcrypt($request->password))->first() ) {
            return redirect()->back()
                ->withInput($request->only('email'))
                ->withErrors(['status' =>  'Incorrect username or password.']);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...