Подтверждение по электронной почте Laravel при регистрации

#laravel #laravel-5 #laravel-5.2 #laravel-authorization

#Laravel #Laravel-5 #Laravel-авторизация

Вопрос:

Мне нужно отправить электронное письмо после создания нового пользователя.

Но я не знаю, как вернуться на домашнюю страницу без получения сообщения об ошибке. Это то, что я делаю прямо сейчас.

 User::create([
            'name' => $data['name'],
            'username' => $data['username'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'phone' => bcrypt($data['phone']),
            'confirmation_code' => str_random(30),
        ]);

Email_function();

if (Auth::attempt(['email' => $data['email'], 'password' => bcrypt($data['password']) ])) {
        // Authentication passed...
        return redirect('/');
    }
  

Я продолжаю получать это как сообщение об ошибке.

 SErrorException in SessionGuard.php line 439:
Argument 1 passed to IlluminateAuthSessionGuard::login() must implement interface IlluminateContractsAuthAuthenticatable, null given, called in /Applications/XAMPP/xamppfiles/htdocs/sniddl/vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php on line 63 and defined
  

Редактировать:
изменен заголовок, чтобы отразить ответ.

Комментарии:

1. Где остальная часть ошибки?

2. Я добавил его сейчас. Извините за это.

3. Какая строка 63 RegistersUser? Попытка аутентификации?

4. registerUser — это файл по умолчанию. вот строка, хотя Auth::guard($this->getGuard())->login($this->create($request->all()));

Ответ №1:

Вот модифицированная функция создания с добавленной функцией электронной почты для вашего контроллера регистра

Убедитесь, что запрос включен в начало страницы с используемыми пространствами имен:

 use IlluminateHttpRequest;
  

Измените функцию создания в вашем контроллере:

 protected function create(Request $data)
{


    $user                       = new User;
    $user->name                 = $data->input('name');
    $user->username             = $data->input('username');
    $user->email                = $data->input('email');
    $user->password             = bcrypt($data->input('password'));
    $user->phone                = bcrypt($data->input('phone'));
    $user->confirmation_code    = str_random(60);
    $user->save();

    if ($user->save()) {

        $this->sendEmail($user);

        return redirect('VIEWPATH.VIEWFILE')->with('status', 'Successfully created user.');

    } else {

        return redirect('VIEWPATH.VIEWFILE')->with('status', 'User not created.');

    }

}
  

Создайте функцию отправки электронной почты в том же контроллере, который будет использовать встроенные в электронную почту Laravels. Убедитесь, что вы создали и ваш HTML-адрес электронной почты:

 public function sendEmail(User $user)
{
    $data = array(
        'name' => $user->name,
        'code' => $user->confirmation_code,
    );
    Mail::queue('EMAILVIEWPATH.HTMLEMAILVIEWFILE', $data, function($message) use ($user) {
        $message->subject( 'Subject line Here' );
        $message->to($user->email);
    });
}
  

ПРИМЕЧАНИЕ:
Вам нужно будет обновить VIEWPATH.VIEWFILE и EMAILVIEWPATH.HTMLEMAILVIEWFILE по минимуму в приведенных выше примерах.

Проверьте репозитории ниже для КОНТРОЛЛЕРА : https://github.com/laravel/laravel/blob/master/app/Http/Controllers/Auth/RegisterController.php
https://github.com/jeremykenedy/laravel-auth/blob/master/app/Http/Controllers/Auth/AuthController.php

ПРИМЕР ПРЕДСТАВЛЕНИЯ РЕГИСТРАЦИИ (блейд) https://github.com/jeremykenedy/laravel-auth/blob/master/resources/views/auth/register.blade.php

ПРОСМОТР электронной почты, КОТОРЫЙ ПОЛУЧАЕТ ПЕРЕМЕННЫЕ: https://github.com/jeremykenedy/laravel-auth/blob/master/resources/views/emails/activateAccount.blade.php

Ответ №2:

Хорошо, получается, что, задав User::create в качестве переменной, вы можете войти в систему пользователя, вернув переменную. Вот так.

 $user = User::create([
            'name' => $data['name'],
            'username' => $data['username'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'phone' => bcrypt($data['phone']),
            'confirmation_code' => str_random(30),
        ]);

Email_function();

return $user;
  

Комментарии:

1. Это то, как вы создаете пользователя в своем контроллере авторизации?