2016-11-03 2 views
2

Я использую встроенную функцию laravel auth. Он работает отлично. Я пытаюсь переопределить следующие две функции.Override Auth Forgot Password в Laravel 5.3

1.send забыл пароль по электронной почте с использованием мандрилла.

2.получайте подтверждение электронной почты при регистрации учетной записи.

Может ли один помочь мне решить эту проблему

Моя цель заключается в использовании оправке вместо электронной почты по умолчанию

Я вижу Auth встроенных методов, но я не получил идею, как я могу переопределить

trait ResetsPasswords 
{ 
    use RedirectsUsers; 

    /** 
    * Display the password reset view for the given token. 
    * 
    * If no token is present, display the link request form. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param string|null $token 
    * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View 
    */ 
    public function showResetForm(Request $request, $token = null) 
    { 
     return view('auth.passwords.reset')->with(
      ['token' => $token, 'email' => $request->email] 
     ); 
    } 

    /** 
    * Reset the given user's password. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    public function reset(Request $request) 
    { 
     $this->validate($request, $this->rules(), $this->validationErrorMessages()); 

     // Here we will attempt to reset the user's password. If it is successful we 
     // will update the password on an actual user model and persist it to the 
     // database. Otherwise we will parse the error and return the response. 
     $response = $this->broker()->reset(
      $this->credentials($request), function ($user, $password) { 
       $this->resetPassword($user, $password); 
      } 
     ); 

     // If the password was successfully reset, we will redirect the user back to 
     // the application's home authenticated view. If there is an error we can 
     // redirect them back to where they came from with their error message. 
     return $response == Password::PASSWORD_RESET 
        ? $this->sendResetResponse($response) 
        : $this->sendResetFailedResponse($request, $response); 
    } 

ответ

1

Laravel предоставляет драйверы для SMTP, Mailgun, Mandrill, Amazon SES, функции почты РНР и Sendmail, чтобы быстро начать работу , отправляя почту через локальную или облачную службу по вашему выбору.

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

MAIL_DRIVER = мандрил

MAIL_HOST =

MAIL_PORT = 2525

MAIL_USERNAME = NULL

MAIL_PASSWORD = NULL

MAIL_ENCRYPTION = NULL

+0

. Спасибо. Я.i также видел в файле mail.php config.how, чтобы отправить проверку подлинности электронной почты при регистрации и изменении шаблона – iCoders

+0

, если я изменю на mandrill, я получил следующую ошибку. Пассирование в опции запроса «тело» в виде массива для отправки запроса POST устарели.Пожалуйста, используйте параметр запроса «form_params» для отправки запроса приложения/x-www-form-urlencoded или опции «multipart» для отправки запроса multipart/form-data. – iCoders

+0

О! Это связано с проблемой обесценения в GuzzleHttp. Проверьте здесь: https://laracasts.com/discuss/channels/laravel/l5-mandrill-error –

0

Вы можете создать свой собственный метод reset в контроллере, который использует этот признак, чтобы переопределить метод в признаке.

2

Как ответил Махфузал, Laravel поставляется с кучей почтовых драйверов из коробки. Поэтому просто обновите свой файл .env, чтобы использовать правильный драйвер.

Как для отправки подтверждения по электронной почте при создании учетной записи, вам просто нужно переопределить функцию postRegister() внутри Auth/AuthController так:

public function postRegister(Request $request) 
    { 

     $validator = $this->validator($request->all()); 

     if ($validator->fails()) { 
      $this->throwValidationException(
       $request, $validator 
      ); 
     } 

     $confirmation_code = str_random(30); 
     $newUser = new User; 
     $newUser->username = $request->username; 
     $newUser->email = $request->email; 
     $newUser->password = bcrypt($request->password); 
     $newUser->confirmation_code = $confirmation_code; 

     $newUser->save(); 

     $data = array('confirmation_code' => $confirmation_code, 'username' => $request->username); 

     Mail::send('emails.verify', $data, function ($message) use ($newUser){ 
      $message->to($newUser->email, $newUser->username); 
       $message->subject('Please verify your email address'); 
     }); 

     return redirect('/auth/login'); 
    } 

Это будет выполнить приведенный выше код при регистрации пользователя, а не то, что Laravel делает дефолт из коробки, поэтому просто подстраивайте его под свои нужды.

Вам просто нужно создать функцию, которая проверит токен и проверит их учетную запись, когда они нажмут на ссылку. Для этого я использую нечто похожее на то, что объясняется here.

+0

@ James.Thanks.i уже изменили «driver» = > 'mandrill', и я получаю следующую ошибку. Передача в запросе «body» в качестве массива для отправки запроса POST устарела. Пожалуйста, используйте параметр запроса «form_params» для отправки запроса приложения/x-www-form-urlencoded или опции «multipart» для отправки запроса multipart/form-data. – iCoders

+0

@iCoders https://laracasts.com/discuss/channels/laravel/l5-mandrill-error – James

+0

@ james.how исправить эту проблему. – iCoders

Смежные вопросы