我正在创建一个更新页面,用户可以在其中更改其电子邮件,但需要密码确认。但在此之前,它需要某种验证,首先检查当前的电子邮件是否正确,以及新电子邮件是否可以保存,以及密码是否正确而不是更新。
但是我在提出请求,验证方面遇到了一些麻烦,有人可以告诉我这是否正确? (不介意我推出的dd,仅用于测试)。
$user = Auth::user();
$this->validate($request, array(
'current_email' => 'required|email|unique:users,email,'. $user->id,
'email' => 'required|email|unique:users',
'verify_password' => 'required|min:6'
));
//Verify information user before updating
if($user->email != $request->current_email){
dd("Current Email is not the same");
}
if($user->password != bcrypt($request->verify_password)){
dd("Password incorrect, will not update");
}
dd("update, is ok now");
答案 0 :(得分:1)
首先在你的控制台中写这个。
php artisan make:provider ValidationServiceProvider
然后将您的app\Providers\ValidationServiceProvider
替换为
namespace App\Providers;
use Validator;
use Illuminate\Support\ServiceProvider;
class ValidationServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot() {
Validator::extend('old_password', function($attribute, $value, $parameters, $validator) {
return auth()->validate([
'email' => auth()->user()->email,
'password' => $value
]);
});
}
/**
* Register the service provider.
*
* @return void
*/
public function register() {
//
}
}
现在将其添加到config\app.php
中的提供商,例如
App\Providers\ValidationServiceProvider::class,
现在用
替换你的方法定义$user = auth()->user();
$validator = Validator::make($request, array(
'current_email' => 'required|email|exists:users,email,id,'. $user->id,
'email' => 'required|email|unique:users',
'verify_password' => 'required|min:6|old_password'
));
if($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
dd("Good to go!!!");
答案 1 :(得分:0)
你有什么工作,但我会推荐几件事。
首先,您已经拥有$request
,因此您应该从中获得user
。虽然Auth::user()
和$request->user()
确实返回相同的内容,但后者不需要使用外观,因此更快一些。
其次,在验证请求正文之前,我会验证它。如果密码不正确,花费验证$request
的资源是没有意义的。
第三,您可以使用exists
规则将$user->email == $request->current_email
检查置于验证中。它就像"exists:users,email,id,$user->id"
。
如何显示错误将取决于请求的执行方式。请查看提交表单的Displaying Validation Errors部分和AJAX请求的AJAX Requests and Validation。