传递给Illuminate \ Auth \ Passwords \ PasswordBroker :: __ construct()的参数2必须实现接口Illuminate \ Contracts \ Auth \ UserProvider,

时间:2020-03-31 09:11:32

标签: laravel reset-password

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');

    }


}

问题是我正在制作multiauth miniproject,我在用户端和管理员端都编写了所有正确的代码...在用户端工作正常,重置密码通知工作正常,但是当我进入管理面板并单击“忘记密码”时,它会显示我填写电子邮件表格,我发送电子邮件并发送重置链接,然后出现此错误,这是任何人都知道的问题,将是感激的。

2 个答案:

答案 0 :(得分:0)

尝试一下:

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);
}


}

}

您需要在php artisan make:notification SendResetPasswordAdmins的此命令上的app / notifications上创建SendResetPasswordAdmin

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
}

答案 1 :(得分:0)

我找到了解决方案。问题出在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,
    ],
],