@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');
        }
    }

}


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

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

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

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

Войти через TM ID
Похожие вопросы
4px Москва
от 100 000 до 150 000 руб.
FUTUROOM Самара
от 150 000 руб.
20 авг. 2018, в 21:21
30000 руб./за проект
20 авг. 2018, в 20:46
5000 руб./за проект
20 авг. 2018, в 20:38
700 руб./в час