@f_u_s_s
Любопытный кодер

Как избавиться от автоматической авторизации после регистрации в Laravel 5.4?

При использовании базовой авторизации/регистрации Laravel, которая генерируется artisan'ом возникла проблема: после успешной регистрации пользователя автоматически авторизует на сайте. По моей задумке - пользователь получает данные для входа на почту и пароль при регистрации не указывает. Соответственно, авторизация не к месту.

По данной проблеме искал решения, самое популярное из них - переопределить в RegisterController.php метод register, взяв его из исходного файла:
public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        $this->guard()->login($user);

        return $this->registered($request, $user)
                        ?: redirect($this->redirectPath());
    }

и удалить там строчку:
$this->guard()->login($user);

Звучит логично, и до этого я дошел и сам. Но почему-то решение не помогает и при регистрации пользователя все равно авторизует. Остальные найденные решения также потерпели фиаско.

Сейчас код контроллера полностью выглядит так (комментарии потер, а то жирно получается):
<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Mail\RegistrationSuccess;
use Illuminate\Support\Facades\Mail;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Http\Request;
use Illuminate\Auth\Events\Registered;

class RegisterController extends Controller
{

    use RegistersUsers;

    protected $redirectTo = '/cp';

    public function showRegistrationForm()
    {
        return view('auth.register', ['no_padding' => true]);
    }

    public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        return $this->registered($request, $user)
                        ?: redirect($this->redirectPath());
    }

    public function __construct()
    {
        $this->middleware('guest');
    }

    protected function registered(Request $request, $user)
    {
        return view('info', [
            'breadcrumbs' => [
                                [
                                    'name' => 'Регистрация',
                                    'href' => route('register')
                                ],
                                [
                                    'name' => 'Завершение',
                                    'href' => '#',
                                    'current' => true
                                ]
            ],
            'page' => [
                'title' => 'Завершение регистрации',
                'content' => 'Регистрация успешно завершена! На адрес '.$request->email.' отправлена информация с данными для входа. Если не видите письма - проверьте его в папке "Спам". Для повторной отправки письма запросите восстановление пароля на странице авторизации'
            ]
        ]);
    }

    protected function validator(array $data)
    {
        return Validator::make($data, [
            'first_name' => 'required|string|max:255',
            'last_name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
        ]);
    }

    protected function create(array $data)
    {
        $password = str_random(16);

        $user_data = [
            'first_name' => $data['first_name'],
            'last_name' => $data['last_name'],
            'email' => $data['email'],
            'generate_pass' => $password,
            'password' => bcrypt($password),
        ];

        $create_user = User::create($user_data);
        if($create_user){
            Mail::to($create_user)->send(new RegistrationSuccess($user_data));
            unset($user_data);
        }
        else{
            dd('error');
        }
    }

}


Может кто сталкивался с подобным? Заранее благодарочка.
  • Вопрос задан
  • 666 просмотров
Пригласить эксперта
Ответы на вопрос 1
@fomenko_alexandr
На самом деле, в дефолтной версии авторизации laravel достаточно закоментировать в трейте RegistersUsers строку $this->guard()->login($user);

Есть мысль, что авторизация была как-то изменена, потому и возникает такая проблема.
Я бы посоветовал установить xdebug и проследить пошагово, как происходит регистрация (что сэкономит и время на поиск решения, и станет понятнее, как оно работает "внутри")

Как вариант, который нужно рассматривать в последнюю очередь - после регистрации убить сессию вручную
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы