Регистрация пользователя Laravel после неудачной авторизации

В Laravel 5.6 вам нужно сделать следующее.

Есть авторизация form - processes у LoginController, в моем случае я сменил емайл на имя, а пароль остался.

Если у такого пользователя такой пароль, то я его авторизую, а если у пользователя нет такого имени и пароля, то необходимо зарегистрироваться с введенными данными.

Вот класс LoginController

namespace App\Http\Controllers\Auth;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;


class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/';
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    protected function redirectTo()
    {
        return '/';
    }

    public function username() {
        return 'name';
    }

    /**
     * Handle a failed authorization attempt.
     *
     * @return void
     *
     * @throws \Illuminate\Auth\Access\AuthorizationException
     */


    protected function sendFailedLoginResponse(Request $request)
    {
        // What you need to do to register a user

    }
}

Я подумал переопределить sendFailedLoginResponse, чтобы зарегистрировать пользователя в тот момент. Запускаем как RegisterController и переносим данные из запроса POST.

Подскажите, как реализовать эту идею?

Вы можете попробовать перенаправить пользователя на экран регистрации со всеми входными данными, которые он вам отправил, и назначить его там. Но я как-то подозрительно отношусь к системам, которые отправляют мои данные в то или иное место. Как правило, пароль пользователя не должен передаваться в системе. Это надо проверить и забыть. (Или сохранены и забыты). Но у меня вопрос, а что, если у вас в логине опечатка?

Rafael 28.08.2018 17:14

- Но у меня вопрос, а что, если у вас в логине опечатка? В этой задаче это не имеет значения. Просто если такого пользователя нет, то создаем. Думаю, такой подход будет плохим. Необходимо на уровне backend организовать регистрацию без редиректов.

Belka 28.08.2018 17:27

Что ж, я вообще не против новых подходов. Но нужно учитывать влияние чего-то подобного. В некотором смысле вы могли бы указать пользователю, что у него нет учетной записи, если он просто забыл свой логин. В какой-то момент у вас обязательно появятся похожие пользователи, потому что они забыли свой первоначальный пароль, что, кстати, может быть безопаснее при использовании электронной почты. Но я понимаю, ты должен делать то, что тебе поручено. Позже я проведу тест на собственном приложении и дам вам знать.

Rafael 28.08.2018 17:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
50
2

Ответы 2

1.) Открыть файл: Illuminate\Foundation\Auth\AuthenticateUsers.php

2.) Найдите способ: логин

3.) Отредактируйте возврат $this->sendFailedLoginResponse($request); в

return url('/register?username='.$request->username.'&password='.Hash::make($password));

Это самый простой способ, но не лучший. Лучше всего не отправлять пароль через get или не устанавливать где-то еще из базы данных.

Такая реализация на мой взгляд не совсем правильная. Я понял вот так

 public function login(Request $request)
 {
    $this->validate($request, [
        'name' => 'required|string',
        'password' => 'required|string'
    ]);
    $user = User::firstOrCreate([
        'name' => $request->name
    ], [
        'name' => $request->name,
        'password' => Hash::make($request->password)
    ]);

    if ($user && Hash::check($request->password, $user->password)) {
        auth()->loginUsingId($user->id);
        return redirect()->intended('/');
    } else {
        throw ValidationException::withMessages([
            $this->username() => [trans('auth.failed')],
        ]);
    }
 }

Другие вопросы по теме