2016-11-12 4 views
2

Я создаю приложение Laravel 5.3 и используя basic auth laravel (artisan make:auth). Теперь функция «Забыли пароль» работает нормально, поэтому, если пользователь не может войти в систему, потому что он не знает своего пароля, он может получить почту для ее сброса. Но теперь я хочу, чтобы зарегистрированные пользователи могли изменить свой пароль. Я нашел that, но это на самом деле не помогает мне. Я также знаю, что есть черта ResetsPasswords, но как ее использовать? И есть ли уже представление, которое я могу использовать?Laravel 5.3 Сменить пароль

Может ли кто-нибудь помочь мне здесь?

ответ

3

, Вам не нужно использовать контроллер пароля по умолчанию для достижения этой цели, вы можете написать свою собственную функцию, чтобы получить тот же результат, например:

public function postUpdatePassword() { 

     $user = Auth::user(); 

     $password = $this->request->only([ 
      'current_password', 'new_password', 'new_password_confirmation' 
     ]); 

     $validator = Validator::make($password, [ 
      'current_password' => 'required|current_password_match', 
      'new_password'  => 'required|min:6|confirmed', 
     ]); 

     if ($validator->fails()) 
      return back() 
       ->withErrors($validator) 
       ->withInput(); 


     $updated = $user->update([ 'password' => bcrypt($password['new_password']) ]); 

     if($updated) 
      return back()->with('success', 1); 

     return back()->with('success', 0); 
    } 

Как вы можете видеть, что я зарегистрировал новый пользовательские правила проверки, чтобы проверить, если новый passowrd соответствует старый, чтобы зарегистрировать правило просто пойти в «приложение/Поставщики/AppServiceProvider.php» и добавить к функции загрузки следующие строки:

Validator::extend('current_password_match', function($attribute, $value, $parameters, $validator) { 
      return Hash::check($value, Auth::user()->password); 
     }); 

Теперь проверка правило работает, но вы не получите сообщение об ошибке, чтобы добавить сообщение об ошибке чтобы вы только что создали новое правило, вам придется изменить эти строки в «ресурсы/языки/EN/validation.php»:

'custom' => [ 
     'current_password' => [ 
      'current_password_match' => 'Current password is incorrect.', 
     ], 
    ], 

Вот, теперь вы можете использовать эту функцию, чтобы изменить текущий пароль :)

+0

выглядит хорошо, так что теперь мне просто нужно представление с формой с полями current_passoword, new_password и new_password_confirm и отправить его на эту функцию, верно? – nameless

+0

Точно это единственное, что вам нужно сделать сейчас. –

+0

получил это, спасибо большое :) – nameless

0

Если вы хотите, чтобы ваш файл AppServiceProvider.php очищался от замыканий (по какой-либо причине; лично мне нравятся эти маленькие файлы ухожен), вы можете добавить выполнить следующие две вещи:

1) Добавьте следующий к способу загрузки() из AppServiceProvider.php

Validator::extend('current_password_match', 'App\Validators\[email protected]'); 

2) Добавить новый файл 'app/Validators/PasswordMatch.php' в соответствии с закрытием, упомянутым выше.

<?php 

namespace App\Validators; 
use Hash; 
use Auth; 

class PasswordMatch 
{ 
    public function check($attribute, $value, $parameters, $validator){ 

     return Hash::check($value, Auth::user()->password); 

    } 

} 

Вы можете также добавить правило проверки сообщений с расширенными сообщений класса СформироватьЗапрос() метод, как:

'current_password_match' => 'Current password is incorrect', 
Смежные вопросы