Аргумент 2, передаваемый в Illuminate \ Auth \ Passwords \ PasswordBroker :: __ construct (), должен реализовывать интерфейс Illuminate \ Contracts \ Auth \ UserProvider, - PullRequest
0 голосов
/ 31 марта 2020

auth. php

   'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
        'admins'=>[
            'providers'=>'admins',
            'table'=>'password_resets',
            'expire'=>60,
            'throttle'=>60,
        ],
    ],

AdminForgotPasswordController. php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
use Illuminate\Support\Facades\Password;
class AdminForgotPasswordController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Password Reset Controller
    |--------------------------------------------------------------------------
    |
    | This controller is responsible for handling password reset emails and
    | includes a trait which assists in sending these notifications from
    | your application to your users. Feel free to explore this trait.
    |
    */

    use SendsPasswordResetEmails;


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


     /**
     * Display the form to request a password reset link.
     *
     * @return \Illuminate\Http\Response
     */
    public function showLinkRequestForm()
    {
        return view('auth.passwords.admin-email');
    }

        /**
     * Get the broker to be used during password reset.
     *
     * @return \Illuminate\Contracts\Auth\PasswordBroker
     */
    public function broker()
    {

        return Password::broker('admins');

    }


}

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

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Я нашел решение. Проблема была в папке auth. php Я использовал провайдеров вместо провайдера, поэтому появляется эта ошибка. просто проверьте config / auth. php и замените этот код.

'passwords' => [
    'users' => [
        'provider' => 'users',
        'table' => 'password_resets',
        'expire' => 60,
        'throttle' => 60,
    ],
    'admins'=>[
        'provider'=>'admins',
        'table'=>'password_resets',
        'expire'=>60,
        'throttle'=>60,
    ],
],
0 голосов
/ 31 марта 2020

попробуйте это:

AdminForgotPasswordController. php

class AdminForgotPasswordController extends Controller
{
use SendsPasswordResetEmails;


protected function broker(){
    return Password::broker('admins');
}

public function sendResetLinkEmail(Request $request){
    $input = $request->all();
    $rules = array(
        'email' => "required",
    );
    $validator = Validator::make($input, $rules);
    if ($validator->fails()) {
        $arr = array("status" => 400, "message" => $validator->errors()->first());
    } else {

        // check if user already exists
        $users = Admins::all();
        if(!$users->isEmpty()){
            foreach($users as $user){
                if($user->email == $request['email']){
                break;
            }
            $user = false;
        }
        }else{
        $user = false;
        }

    if(!$user){
        $arr = array("status" => 400, "message" => "That user doesn't exist");
        return \Response::json($arr);
    }


    // create reset pass token
    $token = Password::getRepository()->create($user);
    $user->notify(new SendResetPasswordAdmin($token,$user->email));
    $arr = array("status" => 200, "message" => "Email to reset password sent");
    return \Response::json($arr);
}


}

}

И вам необходимо создать SendResetPasswordAdmin в приложении / уведомлениях, для которых эта команда php ремесленник делает: уведомление SendResetPasswordAdmins

class SendResetPasswordAdmins extends Notification
{
use Queueable;

/**
 * Create a new notification instance.
 *
 * @return void
 */
public function __construct($token,$email)
{
    $this->token = $token;
    $this->email = $email;    
}


public function via($notifiable)
{
    return ['mail'];
}


public function toMail($notifiable)
{
    return (new MailMessage)
                ->line(Yourmessage)
                ->action('Message2', route('admins.password.reset', ['token' =>$this->token, 'email' => $this->email]))
                ->line(FooterMessage);
}

Маршрут:

 Route::get('admins/password/reset/{token}/{email}', 
 'ResetPasswordAdmins@showResetForm')->name('admins.password.reset');

А это:

class ResetPasswordAdmins extends Controller
 {
public function showResetForm($token,$email){   
return view(yourView)->with(['token' => $token, 'email' 
=> $email]);
}

public function updatePass(Request $request){
//Here your logic and validator
}
...