Как я могу заблокировать охрану при регистрации пользователя в Laravel? - PullRequest
0 голосов
/ 18 сентября 2018

Я использую стандартную регистрацию Laravel и каждый раз, когда я регистрирую пользователя, система в настоящее время регистрирует его, что мне не нужно.

По какой-то причине я думал, что у меня это работает, но сейчас я тестируюувидеть проблему.Ниже приведен мой контроллер регистрации:

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Http\Request;
use Illuminate\Auth\Events\Registered;
use Illuminate\Support\Str;
use Mail;
use App\Mail\verifyEmail;
use Illuminate\Support\Facades\Session;

class RegisterController extends Controller
{

    use RegistersUsers;

    protected $redirectTo = '/';

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

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

    protected function create(array $data)
    {
        $user = User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
            'verifytoken' => Str::random(40),
            'role_id' => $data['role_id']
        ]);
        $thisUser = User::findOrFail($user->id);
        Session::flush('status', 'Please verify your email for account activation');
        $this->sendEmail($thisUser);

        return $user;
    }

    public function sendEmail($thisUser){
        Mail::to($thisUser['email'])->send(new verifyEmail($thisUser));
    }

    public function sendEmailDone($email, $verifytoken){

        User::where(['email'=>$email, 'verifytoken'=>$verifytoken])->update(['status'=>'1', 'verifytoken'=>NULL]);

        return redirect('/login');

    }

    public function verifyEmail(){
        return view('emails.veryEmail');
    }
}

Пользователь регистрируется, ему отправляется электронное письмо с токеном, и он может быть авторизован только после активации токена по электронной почте.

Единственная проблема здесь в том, что пользователь в настоящее время входит в систему автоматически.

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

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

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

0 голосов
/ 18 сентября 2018

Черта RegistersUsers определяет метод регистра:

/**
 * Handle a registration request for the application.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
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);.

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