更改密码用户 laravel 5.3
Posted
技术标签:
【中文标题】更改密码用户 laravel 5.3【英文标题】:change password user laravel 5.3 【发布时间】:2017-01-27 21:45:38 【问题描述】:我想用 laravel 5 创建带有 3 个字段(old_password、new_password、confirm_password)的表单。
查看
旧密码:
!! Form::password('old_password',['class' => 'form-control']) !!
新密码:!! Form::password('password',['class' => 'form-control']) !!
确认新密码:!! Form::password('verify_password',['class' => 'form-control']) !!
用户注册时的控制器
public function postRegister(Request $request)
$rules = [
'email' => 'required|email|unique:users',
'confirm_email' => 'required|same:email',
'password' => 'required|min:8|regex:/^(?=\S*[a-z])(?=\S*[!@#$&*])(?=\S*[A-Z])(?=\S*[\d])\S*$/',
'verify_password' => 'required|same:password',
];
$messages = [
'email.required' => 'email tidak boleh kosong',
'password.required' => 'password tidak boleh kosong',
'password.min' => 'Password harus minimal 8 karakter',
'password.regex' => 'Format password harus terdiri dari kombinasi huruf besar, angka dan karakter spesial (contoh:!@#$%^&*?><).',
'verify_password.required' => 'Verify Password tidak boleh kosong',
'email.email' => 'Format Email tidak valid',
'email.unique' => 'Email yang anda masukkan telah digunakan',
'verify_password.same' => 'Password tidak sama!',
];
$this->validate($request,$rules,$messages);
$newUser = $this->user->create([
'email' => $request->email,
'password' => \Hash::make($request->password),
]);
$this->activationService->sendActivationMail($newUser);
return redirect('/account/login')->with('success', 'Check your email');
我是 laravel 的新手,我读过一些类似的问题来在 *** 中更改密码,但这对我没有帮助。
我应该如何在我的控制器中为更改密码用户编写代码? 提前致谢。
【问题讨论】:
你可以使用内置的密码控制器。 如果你想手动,你必须研究这个vendor\laravel\framework\src\Illuminate\Foundation\Auth\ResetsPasswords\PasswordController.php
页面。
查看5balloons.info/…
【参考方案1】:
这是更改密码表格
<form id="form-change-password" role="form" method="POST" action=" url('/user/credentials') " novalidate class="form-horizontal">
<div class="col-md-9">
<label for="current-password" class="col-sm-4 control-label">Current Password</label>
<div class="col-sm-8">
<div class="form-group">
<input type="hidden" name="_token" value=" csrf_token() ">
<input type="password" class="form-control" id="current-password" name="current-password" placeholder="Password">
</div>
</div>
<label for="password" class="col-sm-4 control-label">New Password</label>
<div class="col-sm-8">
<div class="form-group">
<input type="password" class="form-control" id="password" name="password" placeholder="Password">
</div>
</div>
<label for="password_confirmation" class="col-sm-4 control-label">Re-enter Password</label>
<div class="col-sm-8">
<div class="form-group">
<input type="password" class="form-control" id="password_confirmation" name="password_confirmation" placeholder="Re-enter Password">
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-5 col-sm-6">
<button type="submit" class="btn btn-danger">Submit</button>
</div>
</div>
</form>
创建规则
public function admin_credential_rules(array $data)
$messages = [
'current-password.required' => 'Please enter current password',
'password.required' => 'Please enter password',
];
$validator = Validator::make($data, [
'current-password' => 'required',
'password' => 'required',
'password_confirmation' => 'required|same:password',
], $messages);
return $validator;
修改密码的用户控制器方法
使用验证器;
public function postCredentials(Request $request)
if(Auth::Check())
$request_data = $request->All();
$validator = $this->admin_credential_rules($request_data);
if($validator->fails())
return response()->json(array('error' => $validator->getMessageBag()->toArray()), 400);
else
$current_password = Auth::User()->password;
if(Hash::check($request_data['current-password'], $current_password))
$user_id = Auth::User()->id;
$obj_user = User::find($user_id);
$obj_user->password = Hash::make($request_data['password']);
$obj_user->save();
return "ok";
else
$error = array('current-password' => 'Please enter correct current password');
return response()->json(array('error' => $error), 400);
else
return redirect()->to('/');
【讨论】:
为什么要检查当前密码是否至少包含 8 个字符?也许用户的密码少于 8 个字符,他需要将其更改为 >= 8。 当然可以,但那是代码可能失败的地方;) 哈哈,很高兴看到你同意了 ;) 然后像这样返回 := return redirect()->back()->withErrors($validator)->withInput(); 科马尔做得很好。我不敢相信 Laravel 没有开箱即用的这个功能!毕竟,登录用户可能需要更改密码,就像忘记密码的用户一样! :)【参考方案2】:changePassword.blade.php
@extends('layouts.app')
@section('content')
<!-- header logo: style can be found in header.less -->
<header class="header">
<div class="container">
<div class="row">
<div class="col-lg-6">
<a href="index.php" class="logo">
<!-- Add the class icon to your logo image or logo icon to add the margining -->
<img src="img/airbus-logo.png" />
</a></div>
<!-- Header Navbar: style can be found in header.less -->
<div class="col-lg-6">
@include('partials._userModal')
@include('partials._menu')
</div>
</div>
</div>
</header>
<div class="wrapper">
<div class="container">
<!-- Right side column. Contains the navbar and content of the page -->
<aside class="content files-list clearfix">
<h2>
@if(Auth::check())
Welcome Auth::user()->fullName
@endif
</h2>
<div class="col-xs-5">
<h4>Change password</h4><br />
@if($errors->any())
@foreach($errors->all() as $error)
<p style='padding:15px;' class='bg-danger'> $error </p>
@endforeach
@endif
@if(Request::get('errorMessage') !== null)
<p style='padding:15px;' class='bg-danger'> Request::get('errorMessage') </p>
@endif
<form method="post">
csrf_field()
<div class="placeholder">Current Password</div>
<input style="max-width:200px;" placeholder='Current password' name="oldpass" id="oldpass" class="form-control" type="password"><br>
<div class="placeholder">New password</div>
<input style="max-width:200px;" placeholder='New password' name="password" id="password" class="form-control" type="password"><br>
<div class="placeholder">Confirm password</div>
<input id="password_confirmation" style="max-width:200px;" placeholder='Confirm password' name="password_confirmation" class="form-control" type="password">
<hr>
<input type="submit" class="btn btn-primary" value="Save">
</form>
</div>
</aside>
<!-- /.right-side -->
</div>
<div style=" height: 155px;"></div>
<div id="footer">
<div class="container"> © Airbus Group 2015 </div>
</div>
</div>
<!-- ./wrapper -->
<!-- <script src="js/hub/demo.js" type="text/javascript"></script> -->
<script type="text/javascript">
$(document).ready(function()
var bHeight = $("body").height();
var wHeight = $( window ).height();
if(bHeight < wHeight)
$("#footer").addClass("absolute");
else
$("#footer").removeClass("absolute");
if (!$.support.htmlSerialize && !$.support.opacity)
$(".placeholder").show();
);
</script>
@endsection
控制器发布功能
public function postChangePassword(Request $request)
$validatedData = $request->validate([
'oldpass' => 'required|min:6',
'password' => 'required|string|min:6',
'password_confirmation' => 'required|same:password',
],[
'oldpass.required' => 'Old password is required',
'oldpass.min' => 'Old password needs to have at least 6 characters',
'password.required' => 'Password is required',
'password.min' => 'Password needs to have at least 6 characters',
'password_confirmation.required' => 'Passwords do not match'
]);
$current_password = \Auth::User()->password;
if(\Hash::check($request->input('oldpass'), $current_password))
$user_id = \Auth::User()->id;
$obj_user = User::find($user_id);
$obj_user->password = \Hash::make($request->input('password'));
$obj_user->save();
return view('auth.passwords.changeConfirmation');
else
$data['errorMessage'] = 'Please enter correct current password';
return redirect()->route('user.getChangePassword', $data);
【讨论】:
【参考方案3】:我在这里解释另一种更改用户密码的方法 changepassword.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">Change password</div>
<div class="panel-body">
@if (session('error'))
<div class="alert alert-danger">
session('error')
</div>
@endif
@if (session('success'))
<div class="alert alert-success">
session('success')
</div>
@endif
<form class="form-horizontal" method="POST" action=" route('changePassword') ">
csrf_field()
<div class="form-group $errors->has('current-password') ? ' has-error' : '' ">
<label for="new-password" class="col-md-4 control-label">Current Password</label>
<div class="col-md-6">
<input id="current-password" type="password" class="form-control" name="current-password" required>
@if ($errors->has('current-password'))
<span class="help-block">
<strong> $errors->first('current-password') </strong>
</span>
@endif
</div>
</div>
<div class="form-group $errors->has('new-password') ? ' has-error' : '' ">
<label for="new-password" class="col-md-4 control-label">New Password</label>
<div class="col-md-6">
<input id="new-password" type="password" class="form-control" name="new-password" required>
@if ($errors->has('new-password'))
<span class="help-block">
<strong> $errors->first('new-password') </strong>
</span>
@endif
</div>
</div>
<div class="form-group">
<label for="new-password-confirm" class="col-md-4 control-label">Confirm New Password</label>
<div class="col-md-6">
<input id="new-password-confirm" type="password" class="form-control" name="new-password_confirmation" required>
</div>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary">
Change Password
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
这是 web.php 中的路由
Route::post('/changePassword','HomeController@changePassword')->name('changePassword');
控制器方法
public function changePassword(Request $request)
if (!(Hash::check($request->get('current-password'), Auth::user()->password)))
// The passwords matches
return redirect()->back()->with("error","Your current password does not matches with the password you provided. Please try again.");
if(strcmp($request->get('current-password'), $request->get('new-password')) == 0)
//Current password and new password are same
return redirect()->back()->with("error","New Password cannot be same as your current password. Please choose a different password.");
$validatedData = $request->validate([
'current-password' => 'required',
'new-password' => 'required|string|min:6|confirmed',
]);
//Change Password
$user = Auth::user();
$user->password = bcrypt($request->get('new-password'));
$user->save();
return redirect()->back()->with("success","Password changed successfully !");
我已关注该链接:- https://www.5balloons.info/setting-up-change-password-with-laravel-authentication/
【讨论】:
谢谢你,这些是你提到的教程中缺少的代码sn-ps。所有这些都为我提供了 Laravel 5.7 的一个很好的解决方案 这个很适合我。谢谢! ??? 感谢兄弟,它成功了!不要忘记在你的控制器中导入这些类:使用 Illuminate\Support\Facades\Hash;使用 Illuminate\Support\Facades\Auth;【参考方案4】:这就是我使用 Laravel 5.8 的方式:
查看
确认密码必须是这样的:
!! Form::password('password_confirmation', ['class' => 'form-control'']) !!
因为 Laravel 提供了一个字段 confirmed rule。
创建一个表单请求并将其放入规则部分:
use App\Rules\IsCurrentPassword;
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
return [
'old_password' => ['required', new IsCurrentPassword],
'password' => 'required|string|min:6|confirmed',
];
让我们使用 artisan 来生成一个规则来验证 old_password
是否是真正的当前密码:
php artisan make:rule IsCurrentPassword
并将其放入规则生成的passes方法中:
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
$current_password = auth()->user()->password;
return Hash::check($value, $current_password);
别忘了导入Hash
:
use Illuminate\Support\Facades\Hash;
控制器
您需要在控制器中执行以下操作:
auth()->user()->update([
'password' => Hash::make($request->password)
]);
还有 tada :) 希望我能帮上忙。
【讨论】:
【参考方案5】:Laravel 6 Check Old Password and Updating a New Password
public function updatePassword(Request $request)
$this->validate($request, [
'old_password' => 'required',
'new_password' => 'required|min:6',
'confirm_password' => 'required|same:new_password',
]);
$data = $request->all();
if(!\Hash::check($data['old_password'], auth()->user()->password))
return back()->with('error','You have entered wrong password');
else
here you will write password update code
【讨论】:
【参考方案6】:您也可以使用此代码重置密码。
public function passwordReset(Request $request)
$input = $request->all();
$validated = $request->validate(
[
'current_password' => 'required',
'password' => 'required|confirmed'
]
);
//Change Password
$username = Auth::user();
$name = $username->username;
$currentpassword = $input['current_password'];
$password = $input['password'];
$result = DB::table('user_security')
->where('username', $name)
->get();
$cpassword = $result[0]->password;
if (Hash::check($currentpassword, $cpassword))
$insert = DB::table('user_security')
->where('username', $name)
->update([
'password' => Hash::make($password)
]);
return redirect('viewprofile');
else
return redirect('changepassword');
【讨论】:
以上是关于更改密码用户 laravel 5.3的主要内容,如果未能解决你的问题,请参考以下文章