【问题标题】:Argument 2 passed to Illuminate\Auth\Passwords\PasswordBroker::__construct() must implement interface Illuminate\Contracts\Auth\UserProvider,传递给 Illuminate\Auth\Passwords\PasswordBroker::__construct() 的参数 2 必须实现接口 Illuminate\Contracts\Auth\UserProvider,
【发布时间】:2020-07-11 19:05:02
【问题描述】:

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 我在用户端和管理员端编码一切正确...在用户端运行良好重置密码通知运行良好但是当我进入管理面板并单击忘记密码时它显示我输入电子邮件,我输入电子邮件并发送重置链接,然后出现此错误,任何人都可以知道这是什么问题,将不胜感激。

【问题讨论】:

    标签: laravel reset-password


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      试试这个:

      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 artisan make:notification 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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-12
        • 1970-01-01
        • 2021-10-19
        • 2021-12-22
        • 2019-09-13
        • 1970-01-01
        • 2020-02-04
        • 1970-01-01
        相关资源
        最近更新 更多