В моем приложении Laravel у меня есть Users
, который может войти в систему и зарегистрироваться, и Admins
, который может войти, но не может зарегистрироваться в целях безопасности.
Я использую встроенную функциональность Laravels Auth
, чтобы я мог обрабатывать вход в систему и сбрасывать пароли, просто с добавленным провайдером и защитой для App\Admin
Я пытаюсь создать новых администраторов с помощью формы, которую могут получить только другие пользователи администратора, но я действительно изо всех сил пытаюсь заставить поток работать:
Вот метод в моем AdminController
public function store(StoreAdmin $request)
{
$admin = new Admin();
$admin->first_name = $request->input('first_name');
$admin->last_name = $request->input('last_name');
$admin->email = $request->input('email');
$admin->password = bcrypt(str_random(60));
$admin->access_level = $request->input('access_level');
$admin->save();
Mail::send(new AdminWelcome($admin));
return redirect()->route('admin.index');
}
Это добавляет нового администратора с учетом учетных данных, пропущенных через переменную $request
, а также дает им случайный пароль для начала. Он также инициирует отправку электронного письма на почту вновь созданного пользователя.
Вот класс Mail
, который я использую для передачи данных на электронную почту:
<?php
namespace App\Mail;
use App\Admin;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
use Password;
class AdminWelcome extends Mailable
{
use Queueable, SerializesModels;
/**
* Undocumented variable
*
* @var [type]
*/
public $admin;
/**
* Undocumented variable
*
* @var [type]
*/
public $token;
/**
* @param \App\Models\Admin $user
*/
public function __construct(Admin $admin)
{
$this->admin = $admin;
$this->token = Password::getRepository()->create($admin);
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this
->to($this->admin->email)
->subject('Welcome to ' . config('app.name'))
->view('emails.admin.welcome');
}
}
Это правильно захватывает вновь созданного пользователя-администратора, когда я успешно получаю имя этого пользователя в моих тестах электронной почты. Однако Password::getRepository()->create($admin);
фактически не генерирует токен.
Вот представление, связанное с электронной почтой:
@extends('layouts.app')
@section('content')
<h1>Welcome to <a href="{{ config('app.url') }}">{{ config('app.name') }}</a></h1>
<p>
Dear {{ $admin->first_name }},
</p>
<p>
Your account has been approved. You can now pick a password at our site and login.
</p>
<table>
<tr>
<td>
<p>
<a href="password/reset" . {{ $token }} class="btn-primary">
Pick a password
</a>
</p>
</td>
</tr>
</table>
<p><em>This link is valid until {{
Carbon\Carbon::now()->addMinutes(config('auth.passwords.users.expire'))->format('Y/m/d') }}.</em></p>
@endsection
Маркер не добавляется в URL и не добавляется в таблицу password_resets
. Я забыл здесь что-то очевидное?