Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Никак не пойму как для авторизации (login, register, reset, forgot) использовать разные views.
Если логинятся на сайте одини щаблоны, для админки - другие.
http://example.com/login
http://example.com/admin/login
В стандартном они находятся в resources/views/auth
И контроллеры в Http/Controller/Auth
Например роуты
Auth::routes();
Route::group(['middleware' => 'admin', 'prefix' => 'admin', 'namespace' => 'Admin'], function() {
Route::get('/', 'DashboardController@index')->name('dashboard');
});
Route::group(['namespace' => 'Site'], function() {
Route::get('/', 'HomeController@index')->name('home');
});
Неужели Auth::routes(); переносить внутрь групы?
Или в LoginController.php как-то определять где на сайте или в админке и public function showLoginForm() указывать view
Как-то неочевидно всё.
Про наследование и переопределение что-нить слышал? Хотя, если-бы слышал - не было-бы этого вопроса.
1. создать свои контроллеры
2. создать свои представления (views)
3. создать свои роуты
4. кушать печеньки
Не в сети
Не в сети
Да, конечно
Только он редиректит непонятно куда и там все внутри запрятано и черт ногу сломит
Вот
Route::group(['middleware' => ['admin'], 'prefix' => 'backend', 'namespace' => 'Backend'], function() {
Auth::routes();
});
middleware - не совсем понятно какой прописывать
Получились нужные роуты
| GET|HEAD | backend/login | login | App\Http\Controllers\Backend\Auth\LoginController@showLoginForm | web,admin,guest |
| POST | backend/login | | App\Http\Controllers\Backend\Auth\LoginController@login | web,admin,guest |
| POST | backend/logout | logout | App\Http\Controllers\Backend\Auth\LoginController@logout | web,admin |
| POST | backend/password/email | | App\Http\Controllers\Backend\Auth\ForgotPasswordController@sendResetLinkEmail | web,admin,guest |
| GET|HEAD | backend/password/reset | | App\Http\Controllers\Backend\Auth\ForgotPasswordController@showLinkRequestForm | web,admin,guest |
| POST | backend/password/reset | | App\Http\Controllers\Backend\Auth\ResetPasswordController@reset | web,admin,guest |
| GET|HEAD | backend/password/reset/{token} | | App\Http\Controllers\Backend\Auth\ResetPasswordController@showResetForm | web,admin,guest |
| GET|HEAD | backend/register | | App\Http\Controllers\Backend\Auth\RegisterController@showRegistrationForm | web,admin,guest |
| POST | backend/register | | App\Http\Controllers\Backend\Auth\RegisterController@register | web,admin,guest |
'admin' => \Illuminate\Auth\Middleware\Authenticate::class,
//'admin' => \Illuminate\Auth\Middleware\Admin::class,
вариантов кучу перепробовал дальше с контроллерами и наследованием - редиректит непонятно куда и где это вообще контролировать
Самый простой пример (это middleware):
public function handle($request, Closure $next) {
/*
* Если гость, нет доступа
*/
if (!Auth::check()) {
return redirect('noaccess');
}
/*
* Если владелец, открытие страницы редактирования
*/
if (Auth::user()->id == $request->route('user')) {
return redirect()->route('users.edit', [Auth::user()->id]);
}
/*
* Если авторизованный открывает чужой профиль, то просмотр
*/
return $next($request);
}
Здесь, правда, другие проверки, но смысл тот же самый. Роут подставляется в зависимости от результата проверки.
Изменено Androbim (25.11.2016 12:41:42)
Не в сети
Я наверное неправильно спрашиваю, все это я знаю.
Убираю контроллеры в Http/Controller/Auth нахрен.
Переношу их в Http/Controller/Backend/Auth и соответствующие ставлю namespaces
Делаю роут
Route::group(['middleware' => ['admin', 'auth'], 'prefix' => 'backend', 'namespace' => 'Backend'], function() {
Auth::routes();
});
Для логина выходит
App\Http\Controllers\Backend\Auth\LoginController@showLoginForm
App\Http\Controllers\Backend\Auth\LoginController@login
В middleware Auth.php пока пусто
public function handle($request, Closure $next)
{
return $next($request);
}
Так вот при /backend/login - он меня перебрасыват на /login (тем более его уже нет, можно от него отнаследоваться по идее, но сути не меняет)
Почему, где это вообще находится?
Есть еще /app/Exceptions/Handler.php unauthenticated где return redirect()->guest('login');
А после авторизации куда и как направлять - понятно.
А вообще все пошло из-за:
сделать авторизацию для админки со своими url и шаблонами, а для сайта со своими.
Может я вообще не так что-то изначально делаю?
Админку сами пишете?
Не в сети
Да сам
P.S.Не указал в начале: Laravel 5.3, PHP 7.08
Да вроде обычная задача, запрятали все внутрь и фиг че поменяешь, раскидал эту авторизацию где только можно по файлам
Я не пойму. По-идее, обычные роуты. Просто нужны проверки прав и редиректы, если что-то не так. Разве нет? Я пример Вам именно такой привел.
Насчет того, что "запрятали все внутрь" - согласен.
Вот пример, как лично я разбирался когда-то, даже "цепочку" записал, для памяти, от комментариев удержаться не мог:
"Метод sendResetLink
в контроллере
ForgotPasswordController
Использует трейт
SendsPasswordResetEmails
Там есть
sendResetLink($request->only('email'));
Которая определяется в интерфейсе
PasswordBroker
*Который (как PasswordBrokerContract) реализует класс PasswordBroker*
В
namespace Illuminate\Auth\Passwords;
Вот там и есть "лежбище"
sendResetLink
И есть там
$user->sendPasswordResetNotification($this->tokens->create($user));
А сам класс использует
CanResetPassword as CanResetPasswordContract
И вот там-то
public function sendPasswordResetNotification($token)
{
$this->notify(new ResetPasswordNotification($token));
}
А вот и сам класс, экземпляр которого создается
class ResetPassword extends Notification
Вот! Тут-то и идет наследование от Нотификации.
Маразм, блин!"
Изменено Androbim (26.11.2016 09:04:21)
Не в сети
Мне нужно попасть на /backend/login - вот никак пока.
Какого хрена он меня бросает на /login - непонятно
Если я меняю в /app/Exceptions/Handler.php
return redirect()->guest('login');
на
return redirect()->guest('backend/login');
зацикливает понятное дело
В 5.1 кажись было protected $loginPath = '/login'; в AuthController и по идее можно было поменять для фронта и админки раздельно
Теперь его заменил redirect()->guest('login'); я так понял
Изменено AlexXYZ (26.11.2016 09:38:41)
Не в сети
Учись читать файлы по цепочке наследования. Включая Трейты.
Уверен - найдёшь.
Не в сети
Я понимаю, но нахрена такой фреймворк, где элементарный вещи и стандартные довольно нужно читать по цепочке в горе файлов, которых нагородил тейлор еще и меняет от версии к версии все к черту)
Не в сети
Я понимаю, но нахрена такой фреймворк, где элементарный вещи и стандартные довольно нужно читать по цепочке в горе файлов, которых нагородил тейлор еще и меняет от версии к версии все к черту)
А вот вопли отчаяния здесь никому не интересны. Если на то пошло, проблема Ваша - искусственная, "игры ума". Наворотили, а теперь жалуетесь. А там - просто все, и не нужны эти неймспейсы.
Не в сети
А что тут должно быть интересно?
Ничего я не нагородил - это обычная задача.
Авторизация для админки по одному url
Авторизация для сайта или юзера - по другому url
Соответственно и шаблоны будут разные.
По умолчанию - они общие и роут один для авторизации.
Что здесь навороченного?
У меня фронт вообще не на ларавеле может быть, но для админской auth нужны пути с префиксом /admin например.
Не в сети
Ну и что? А разве одна и та же форма авторизации (или для админов она другая?) не может быть расположена по разным представлениям, пусть даже и с префиксами? Пользователь/админ выполняет вход, а далее - проверка роли и соответствующий редирект. Или так сделать категорически нельзя?
Только не надо про то, что обычный пользователь, с какой-то стати будет логиниться в админку, а админ заходить во фронтенд. Но даже если и так, это ничему не помешает.
А неинтересны здесь (лично мне) негативные высказывания о фреймворке, когда что-то не получается.
Изменено Androbim (26.11.2016 12:01:50)
Не в сети
Или я не понимаю или вы не понимаете, что я сделать хочу.
Не нужно мне после авторизации.
У меня авторириция чтоб была по /admin/login и /user/login
backend часть вообще в группе Route::group для backend-части
frontend часть группе Route::group для frontend-части
Это разные роуты и разные группы в файле роутов
Каким образом я сделаю авторизацию учитывая эти роуты?
В стандартном варианте четкий путь для Auth::routes();
И, собственно там
App\Http\Controllers\Auth\LoginController@showLoginForm
App\Http\Controllers\Auth\LoginController@login
У которых свои формы для логина и остальное
Auth::routes - вообще не в группах
По пути /admin/login - один контроллер авторизации выходит
По пути /user/login - один контроллер авторизации выходит
App\Http\Controllers\Auth\ - вообще ни при делах получается
Изменено AlexXYZ (26.11.2016 12:29:07)
Не в сети
Я говорю вот о чем. При авторизации используется один контроллер, одна форма, один middleware. Если логинится, к примеру, админ, его редиректит в админку, если пользователь - то во фронтэнд, если ошибка, то... возможны варианты При этом, естественно, эта форма может располагаться в любом представлении, хоть тут login, хоть тут admin.login
Чем это Вас не устраивает?
Не в сети
Так я про это и говорю и говорю чем не устраивает)
В том то и дело что один контроллер, одна форма, один middleware
views я где угодно запихнуть могу
Но нужно для админки и фронта разные
Это как в любой почти cms - админ чать со своим шаблоном формами авторизации напоминалками пароля
И дело в том, что когда я нахожусь в контроллере LoginController, то я не знаю какие views подключать, т.к. неизвестно в админ части я или на фронте.
Следовательно я хотел перенести эти auth контроллеры в соответствующие директории, но тут куча проблем вылезла
Изменено AlexXYZ (26.11.2016 12:44:01)
Не в сети
Что нужно "разные"? Для пользователей один функционал, для админов - другой? Кто сказал, кстати, что нужно именно так?
Не в сети
Вроде это не редкость, нужно вот так, в таком роде
http://joxi.ru/8An9633u4G7O2O - вход на фронт
http://joxi.ru/L21d033UBygEmX - вход в админку
Изменено AlexXYZ (26.11.2016 12:54:00)
Не в сети
И дело в том, что когда я нахожусь в контроллере LoginController, то я не знаю какие views подключать, т.к. неизвестно в админ части я или на фронте.
Следовательно я хотел перенести эти auth контроллеры в соответствующие директории, но тут куча проблем вылезла
Погодите. Редиректит-то на роуты, разве нет? А нужный контроллер подключается по роуту. Я что-то не то говорю?
Не в сети
а какой редирект, если я просто захожу на страницу логина?
Логина для админки - еслих очу зайти в админку и логина на сайте, если хочу зайти в личный кабинет
Не в сети