Настроить перенаправление в Laravel Auth - PullRequest
0 голосов
/ 04 декабря 2018

Я хочу настроить Laravel Auth.Я хочу различать администраторов и пользователей.В таблице пользователей по умолчанию я добавил роль столбца с двумя опциями: admin и user.Согласно руководству, я определяю метод redirectTo.

class LoginController extends Controller
{
    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     */

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

    protected function redirectTo()
    {
        if (Auth::user()->role == 'admin') {
            return 'admin/home';
        } else {
            return '/main';
        }
    }

    protected function show_admin_homepage()
    {
        return view('auth.admin_h');
    }

    protected function show_user_homepage()
    {
        return view('auth.user_h');
    }
}

Маршруты

Route::get('main', 'Auth\LoginController@show_user_homepage')->name('show_user_homepage');
Route::get('admin/home', 'Auth\LoginController@show_admin_homepage')->name('show_admin_homepage');

Проблема заключается в том, что когда я регистрируюсь какпользователь или администратор, я всегда перенаправляю на домашний вид по умолчанию.Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Я хотел бы различать администраторов и пользователей ...

Вместо того, чтобы пытаться заново создать колесо и возиться с Аутом, почему бы не простоиспользовать что-то уже построенное и простое в использовании?

Spatie / Laravel-Permission может помочь вам в этом.

Например, чтобы создать роль администратора, вам нужно просто сделать следующее:

$role = Role::create(['name' => 'admin']);

Затем дать ему некоторые разрешения:

$permission = Permission::create(['name' => 'super power']);
$role->givePermissionTo($permission);

И назначитьроль модели пользователя в вашем контроллере

$user->assignRole('admin');

Оттуда вы можете запросить, есть ли у пользователя определенная роль, либо в вашем контроллере:

if( $user->hasRole('admin') )
{
    // The user has the admin role 
    return view('admin-page');

} else {
    // This is a generic user 
    return view('main');

}

ИЛИ в вашем блейде

@role('admin')
    I took the red pill!
@else 
    I took the blue pill.. 
@endrole 

Я предлагаю это, потому что его можно масштабировать и легко интегрировать в ваш проект.Поскольку ваш проект продолжает расти, если вам нужно добавить новые разрешения для роли, это одна строка кода.

0 голосов
/ 07 декабря 2018

Контроллер входа по умолчанию использует AuthenticatesUsers trait.В этой особенности есть защищенный метод с именем authenticated , переопределяющий его в контроллере входа.

Ниже приведена реализация метода authenticated

* 1010.*
0 голосов
/ 04 декабря 2018

Вы должны изменить перенаправление в методе handle файла RedirectIfAuthenticated.php, который находится в App/Http/Middleware

Этот метод выглядит следующим образом:

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {
        return redirect('/home');
    }

    return $next($request);
}
...