Laravel Регистрация пользователя после неудачной авторизации - PullRequest
0 голосов
/ 28 августа 2018

В 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.

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

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

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

 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')],
        ]);
    }
 }
0 голосов
/ 28 августа 2018

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

2.) Поиск метода: войти

3.) Изменить возврат $this->sendFailedLoginResponse($request); на

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...