Создание новых администраторов в Laravel - PullRequest
0 голосов
/ 30 августа 2018

В моем приложении 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. Я забыл здесь что-то очевидное?

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