Я хочу настроить два пути входа,
Laravel 5 предоставляет аутентификационное ПО для аутентификации. Среднее программное обеспечение также предоставляет представления по умолчанию для входа, сброса пароля и т. Д., Которые я планирую использовать как есть, функционально.
!: Какие изменения необходимы в routes.php и в контроллерах для управления этими двумя входами?
!!: Как мне управлять своими переадресациями (один для панели администратора, другой обратно на главную страницу)? (в настоящее время auth перенаправляет на «домашний» вид по умолчанию)
Изменить: я знаю, как предотвратить несанкционированный доступ, однако я говорю о настройке, где я могу управлять обоими обращениями отдельно.
Один из способов – связать один и тот же контроллер с разными путями, если пул пользователей на самом деле тот же.
Вы можете решить, где перенаправить на основе зарегистрированного типа пользователя в промежуточном ПО RedirectIfAuthenticated.
Вы можете проверить свой контроллер, если пользователь является администратором или пользователем, и представить ему правильное представление, но вам действительно нужна страница входа для пользователей и администраторов? Вам действительно нужен пароль для восстановления, отличный от обоих? Если нет, вы можете использовать AuthController для обоих из них, если да, то почему бы вам не создать два контроллера, которые расширяют AuthController?
Для меня лучшее решение и чистить и разделять вещи, почему бы вам не расширить или даже не изменить RedfirectIfAuthenticated
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Contracts\Auth\Guard; use Illuminate\Http\RedirectResponse; use User; class RedirectIfAuthenticated { /** * The Guard implementation. * * @var Guard */ protected $auth; /** * Create a new filter instance. * * @param Guard $auth * @return void */ public function __construct(Guard $auth) { $this->auth = $auth; } /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if ($this->auth->check()) { //we have a logged user check if it's admin if($this->auth->user()->admin){ return new RedirectResponse(url('/admin')); }else{ return new RedirectResponse(url('/user')); } } return $next($request); } }
Вы также можете создать промежуточное программное обеспечение для защиты ваших маршрутов администратора:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Contracts\Auth\Guard; class VerifyAdmin { /** * The Guard implementation. * * @var Guard */ protected $auth; /** * Create a new filter instance. * * @param Guard $auth * @return void */ public function __construct(Guard $auth) { $this->auth = $auth; } /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if (!$this->auth->user()->admin) { if ($request->ajax()) { return response('Unauthorized.', 401); } else { //redirect user or guest to home page or something like that } } return $next($request); } }
зарегистрируйте свое промежуточное ПО:
// Within App\Http\Kernel Class... protected $routeMiddleware = [ 'auth' => 'App\Http\Middleware\Authenticate', 'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth', 'guest' => 'App\Http\Middleware\RedirectIfAuthenticated', 'auth.admin' => 'App\Http\Middleware\VerifyAdmin', ];
На ваших маршрутах:
Route::group(['prefix' => 'admin', 'middleware' => 'auth.admin'], function() { Route::resource('profile','API\ProfileController'); });
Администратор и пользователи в том же приложении laravel – это плохая идея, потому что приложение будет использовать одну и ту же информацию о сеансе и хранении. Будет множество случаев egde, которые вызовут утечку информации через любые логические «стены», которые вы создали, и вы закончите тратить слишком много времени на исправление этих кровотечений. То, что вы действительно хотите сделать, это настроить отдельные приложения для laravel для каждого: admin.project.com и project.com. Таким образом, вы получаете два отдельных сеанса и хранилище. Все, что вам нужно сделать, это убедиться, что необходимые вам базы данных установлены в обоих файлах конфигурации database.php. Вы даже можете разместить проекты BOTH на одном сервере с отдельными развертываниями, слушая разные порты. ТРАСТ МЭ это лучший способ пойти.