首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >传递给Illuminate\Auth\Passwords\PasswordBroker::__construct()的参数2必须实现接口Illuminate\Contracts\Auth\UserProvider,

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

Stack Overflow用户
提问于 2020-03-31 17:11:32
回答 2查看 898关注 0票数 0

auth.php

代码语言:javascript
运行
复制
   'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
        'admins'=>[
            'providers'=>'admins',
            'table'=>'password_resets',
            'expire'=>60,
            'throttle'=>60,
        ],
    ],

AdminForgotPasswordController.php

代码语言:javascript
运行
复制
<?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');

    }


}

问题是,我正在做多身份验证迷你项目,我的代码一切正确在用户端和管理员side...at用户端工作良好,重置密码通知工作良好,但当我去管理面板,点击忘记密码,它显示我的表单放电子邮件,我把电子邮件和发送重置链接,然后出现这个错误是什么问题,任何人都可以知道,将非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2020-03-31 18:19:08

试试这个:

AdminForgotPasswordController.php

代码语言:javascript
运行
复制
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: SendResetPasswordAdmin SendResetPasswordAdmins

代码语言:javascript
运行
复制
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);
}

路由:

代码语言:javascript
运行
复制
 Route::get('admins/password/reset/{token}/{email}', 
 'ResetPasswordAdmins@showResetForm')->name('admins.password.reset');

还有这个:

代码语言:javascript
运行
复制
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
}
票数 0
EN

Stack Overflow用户

发布于 2020-04-01 10:43:11

我找到了解决方案..问题出在auth.php文件夹中,我使用的是provider而不是provider,所以出现了这个错误。只需检查config/auth.php并替换此代码。

代码语言:javascript
运行
复制
'passwords' => [
    'users' => [
        'provider' => 'users',
        'table' => 'password_resets',
        'expire' => 60,
        'throttle' => 60,
    ],
    'admins'=>[
        'provider'=>'admins',
        'table'=>'password_resets',
        'expire'=>60,
        'throttle'=>60,
    ],
],
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60947038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档