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の初心者です。stackoverflowでパスワードを変更するためにいくつかの同様の問題を読みましたが、それは私を助けませんでした。
パスワードを変更するユーザーのために、どのようにコントローラーにコードを書くべきですか?前もって感謝します。
これはパスワード変更フォームです
<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|same:password',
'password_confirmation' => 'required|same:password',
], $messages);
return $validator;
}
パスワードを変更するユーザーコントローラーメソッド
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('/');
}
}
ここでユーザーパスワードを変更する別の方法を説明します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/
これはLaravel 5.8でこれを行う方法です。
表示
パスワードが次のようなものであることを確認します。
{!! Form::password('password_confirmation', ['class' => 'form-control'']) !!}
Laravelはボックスにフィールド 確認済みルール を提供するためです。
フォームリクエストを作成し、これをルールパーツ内に配置します。
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',
];
}
old_password
が実際の現在のパスワードであるかどうかを検証するルールを生成するために職人を使用してみましょう:
php artisan make:rule IsCurrentPassword
そして、生成されたルールのpassメソッド内にこれを置きます:
/**
* 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)
]);
そして多田:)私が助けてくれることを願っています。