#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. Это то, как вы создаете пользователя в своем контроллере авторизации?