2014-10-22 3 views
0

Я разрабатываю приложение, используя Laravel 4, где мне нужно иметь 2 типа аутентификации.Laravel двойные типы аутентификации

Тип 1: Пользователи - администраторы/бэк-офисные сотрудники системы.

Тип 2: Клиенты - которые являются посетителями сайта, которые могут выполнять определенные функции (например, услуги покупки), если они аутентифицированы.

Пользователи 1-го типа аутентифицируются с использованием имени пользователя/пароля, что идеально подходит для модели аутентификации Laravel.

Клиенты Type 2 будут аутентифицированы либо с использованием стиля OAuth (с Google/Facebook), либо с помощью ручной аутентификации, если клиент предпочитает. Я не хочу смешивать их вместе, поэтому, если вы авторизованы как клиент, я не хочу, чтобы фильтр проверки подлинности думал, что вы можете получить доступ к страницам администратора, и наоборот.

У двух типов будут свои собственные таблицы (соответственно пользователи и клиенты). Есть ли способ, чтобы какая-то другая модель Auth работала одновременно? Или я должен написать свое собственное дело для клиентов? Каков рекомендуемый подход в этом сценарии?

ответ

0

Если я правильно понимаю ваш вопрос, это должно привести вас к правильному пути.

Вы можете просто установить индикатор account_level в каждой таблице и обернуть маршруты администратора в фильтр, который проверяет правильность учетной записи пользователя. Например:

в routes.php

Route::group(array('before' => 'admin_only'), function() { 
    Route::get('my-admin-route', '[email protected]'); 
}); 

в filters.php

Route::filter('admin_only', function() { 
    if (!Auth::check() || Auth::user()->account_level !== Config::get('constants.ADMIN_ACCOUNT_LEVEL') { 
     return App::abort(404); 
    } 
}); 

Для того, чтобы войти пользователя в том, что не имеет имя пользователя и пароль в системе вам потребуется для обработки соединения OAuth отдельно, и как только у вас есть действительный пользователь, вы можете использовать метод Auth::login($user), чтобы вернуть пользователя в обычный поток приложений.

http://laravel.com/docs/4.2/security#manually

+0

Мой вопрос больше связан с класса 'Auth'. Должен ли я разработать свой собственный драйвер Auth (поскольку я не обязательно аутентифицирую использование имени пользователя и пароля для клиентов, но используя OAuth)? Как мой 'Auth: check()' будет различать два типа аутентификации? Я, очевидно, мог бы прибегать к тому, чтобы не использовать Auth вообще для клиентов и вводить новый класс, но я не хочу изобретать велосипед, если есть что-то, предназначенное для этого сценария. – jbx

+0

В этом случае вы, вероятно, хотите обрабатывать свой логин OAuth отдельно, но при этом использовать модель Auth для обработки пользовательских сеансов. Это можно сделать, используя метод Auth :: login. После вызова Auth :: login ($ user) вы можете продолжать использовать модель Auth как обычно –

+0

Так что, по сути, вы предлагаете, что я использую 'Auth' для своих пользователей, но моя собственная вещь для« Клиентов », и у меня есть отдельный фильтр для страниц клиента, который использует мою собственную вещь, а не 'Auth'. Я прав? – jbx

Смежные вопросы