Не понимаю, как запустить метод auth из метода check, при успешной валидации? Много статей и не одной толковой. PHP: public function check(Request $request) { if($this->validate($request,[ 'password'=>'required|min:3', 'email' => 'required|email', ])) { return $this->auth(); } } public function auth(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { echo 'Данные правильные'; } else { echo 'Данные не правильные'; } } Сейчас, после успешной валидации, отображается пустая страница.
Немного переделал функцию, не знаю, как запустить auth PHP: public function check(Request $request) { $validator = Validator::make($request->all(), [ 'password'=>'required|min:3', 'email' => 'required|email', ]); if ($validator->fails()) { return redirect()->back()->withErrors($validator->errors()); } else { return $this->auth(Request $request); } } --- Добавлено --- Дошло return $this->auth($request);
ты можешь его вообще не передавать он сам создастся так как указан Request или использовать хелпер тогда и он не нужен request()->name
@nospiou А как авторизировать пользователя, после успешной проверки? PHP: public function auth(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { if (Auth::check()) { //что сюда писать? } } else { return redirect()->back(); } } --- Добавлено --- Пробовал посмотреть, что в сессии, но просто так туда не залезть.
attempt уже авторизовывает (пишутся куки) а вызвать можно как auth()->user()->id --- Добавлено --- dd(session()->toArray()) наверное
ну вот я писал апи на токене так все эти методы которые что то в сессию пишут пришлось выбрасывать attempt один из них) --- Добавлено --- Без него будет вот так PHP: $user = \App\User::where(['email' => request()->email])->first(); $check = $user ? \Hash::check(request()->password, $user->password) : false; // ну и логин без сессии auth()->setUser($user) // или с сессией auth()->login($user) //и после него уже работает auth()->user()
@Dimon2x, что ты воротишь, когда там всё уже готово в Laravel по этому поводу? Чуть подстраиваешь под свою задачу за пол часика, и радуешься --- Добавлено --- Illuminate\Foundation\Auth\AuthenticatesUsers - почитай код этого трейта, редкий случай, когда от кода Laravel не хочется беленькой хлебнуть --- Добавлено --- И да, Auth::attemp если вернул истину, в сессию уже всё, что надо записано.
@mkramer я пытаюсь создать свою регистрацию и авторизацию, для того, что бы бытл готов, если надо будет сделать сделать нестандартную регистрацию или авторизацию.
Разбери для начала тот код, что есть. Хотя, для "нестандартной" аутентификации/регистрации там пару методов трейта своими перекрываешь, и, опять же, радуешься. Но, чтоб знать, что перекрыть, надо почитать код. В доке этого не описано, насколько помнится, сам нашёл. Вот, к примеру, чтоб возвращался json, что я сделал в своём LoginController (мне заказали аутентификацию в всплывашке): PHP: protected function authenticated(Request $request, $user) { $redirectTo = $request->session()->get("redirectAfterLogin", $this->localization->localizeURL("/")); $request->session()->remove("redirectAfterLogin"); return ["redirectTo" => $redirectTo]; } --- Добавлено --- Берёшь стандартный трейт, и выясняешь, чего каждая строчка делает. И понимаешь, что надо исправить для себя. Мы же для чего фреймворками пользуемся? Чтоб всё за нас сделано было
Ну не знаю как по мне то лучше переписать там 2 строчки кода А иногда не просто лучше а и нужно. К примеру тоже апи без сессии authenticated точно в даках есть
Ну я уже не помню, где нашёл, но нашёл. А код всё равно почитать стоит, забавный. Например, там сразу защита от брутфорса вшита во фреймворк --- Добавлено --- Я бы в таком случае свой guard сделал. А ещё для API есть https://laravel.com/docs/master/passport
А нет вру есть только authenticate Ну это понятно. Просто attempt login и т.д они пишут сессии. Если ты авторизацию пустишь через гвард апи они будут ругаться на то что миделвера сессии не подключена а так ты нашел пользователя проверил если все ок вернул $user->createToken('app') и никакие сессии которыми ты и пользоваться не будешь не нужны.
Это немного другое. Это то как тебя будут определять. По токену в хедере или по кукам и сессии. Ну а сам логин (для получения того же токена) как по мне проще переписать где то в отдельном методе отдельном контроллере чем переопределять трейды. Вообщим суть в том что сама система авторизации мне нравится а вот контроллеры все равно нужно переписывать. И лучше сделать это явно. --- Добавлено --- Вот как пример один из трейдов куда не посмотри везде сессии. Переопределять все это как то совсем уж не круто. PHP: protected function sendResetLinkFailedResponse(Request $request, $response) { return back()->withErrors( ['email' => trans($response)] ); }
@nospiou, ну это дело не под api, для api там другой пакет, я ссылку кидал А для обычной системы сессии - самое то, тем более вариантов, где их хранить, Laravel предоставляет до фига. --- Добавлено --- P.S. PHP: protected function sendResetLinkResponse($response) { return response()->json(["success" => true]); } protected function sendResetLinkFailedResponse(Request $request, $response) { return response("", 422)->json(["errors" => ["email" => __("passwords.user")]]); } Из моего проекта
Ну так в паспорте или в стандартном драйвере апи всех эти плюшек нету) Все равно же нужно всю остальную логику писать. Там только процесс аутентификации) Под сессии согласен. Хотя могли бы и универсально написать) Есть еще разные dingo jwt-auth и т.д никак руки не доходят посмотреть. Паспорт с офф поддержкой все равно его использовать буду)
Не понимаю, почему в роутере, не находит авторизированного пользователя (null), а если этот код поместить в любой контроллер, в любой метод, то находит? PHP: dd($user = Auth::user());
Потому что файл с определениями роутов выполняется до всех middleware (в одном из них как раз и проверяется кука сессионная). Если тебе там уже требуется авторизованный юзер уже в определение роутов, ты что-то не так делаешь. Роуты не должны такой логики содержать. Это уже часть контроллеров, middleware и прочего. --- Добавлено --- Если роуты закешированы, этот файл вообще не выполняется, кстати.
Делаю всё по доке. Не понимаю, почему ругается на Auth guard [user] is not defined.? В контроллере регистрации прописал PHP: use Illuminate\Support\Facades\Auth; PHP: protected function guard() { return Auth::guard('user'); } --- Добавлено --- в IDE нету перехода по ссылке guard
Изменил в LoginController перенаправление на корень, всё равно переходит на home почему? PHP: protected $redirectTo = '/'; protected function redirectTo() { return '/'; }
Ты как не программист... Что, в трейт не залезть? И если пишешь, что делаешь по доке, сразу ссылку давай. Фасады в LAravel специфически работают, IDE этого понять не в состоянии даже с пакетом ide-helper-а. А зачем ты меняешь guard? у тебя несколько моделей пользователей? Или не используется Eloquent? Потому что этот кастомный guuard ещё переопределить нужно. ТОлько нужно ли это тебе - я не уверен. Это нужно, если ты хочешь что-то другое использовать, не стандартный для Laravel путь проверки, войдён ли пользователь. А в твоём случае тебе оно надо?
@mkramer я хочу сделать, что бы вход был возможен только для админа. --- Добавлено --- @mkramer https://laravel.com/docs/5.6/authentication
@mkramer Правильным ли я способом узнаю роль пользователя? В базе создал строку role. В моделе User сделал метод PHP: public function isRole() { $role = $this::where('id', '=', Auth::id())->firstOrFail()->role; if($role == 'admin') return 'Админ'; return 'Пользователь'; } Потом в контроллере обращаюсь к нему PHP: $userRole = $this->role->isRole(); Передаю в вид и вывожу там Код (Text): {{$userRole}}