2017-04-06 105 views
0

如何在兩個不同的ResetPasswordNotifications之間切換?Laravel 5.4在2個不同的ResetPassword通知之間切換

我已經得到了通常的重置密碼,但是當一個新用戶由管理員創建(在一個單獨的控制器中)時,他們也會得到一個重置密碼「like」通知。它將具有不同的內容,但通過提供帶有所生成和存儲的令牌的URL來實現相同的目的。

我可以看到如何做到這一點的唯一方法是:

  1. 創建我自己的PasswordBroker繼承Laravel的PasswordBroker
  2. 覆蓋PasswordBroker :: sendResetLink採取額外的PARAM
  3. 註冊新PasswordResetServiceProvider中的PasswordBroker
  4. 然後,當它被調用時,它將採用用戶名param(原始)和一個額外的參數來切換通知,如

    Password :: broker() - > sendResetLink($ username,$ myNewToggleParam);

這是最簡單的方法來做到這一點,並保持爲用戶創建和存儲令牌的重置密碼功能。

回答

0

通過散步到PasswordBroker,然後到PasswordResetServiceProvider找到它在服務容器中實例化的位置,然後我可以做到這一點,以便將備用密碼重置通知發送到剛剛由儀表板中的管理員創建的用戶。

爲了簡便起見,我只放少量的公共端點,倒是在的情況下完整解決方案失去方面沒有它:

/** 
* Store a newly created user in storage, and send a notification to 
* indicate the account was created and requires a password reset. 
* 
* @param \Illuminate\Http\Request $request 
* @return \Illuminate\Http\JsonResponse 
*/ 
public function store(Request $request) 
{ 
    $this->authorize('store', User::class); 

    $this->validate($request, [...]); 

    $user = $this->create($request); 

    $this->sendResetLinkEmail($user); 

    return response()->json([ 
     'user' => $user, 
     'message' => trans('user.created'), 
    ]); 
} 

/** 
* Send a reset link to the new user. 
* 
* @param User $user 
*/ 
private function sendResetLinkEmail(User $user) 
{ 
    // Reach into the service container for the password broker 
    $passwordBroker = App::make('auth.password.broker'); 

    // Create a new token from the token repository, and send of the email 
    // notification to the new user to reset their password 
    $user->sendNewUserPasswordResetNotication(
     $passwordBroker->getRepository()->create($user) 
    ); 
} 

不要忘記爲新的通知添加到用戶模型。