سلام دوستان
من یه قسمتی رو برای کاربر در نظر گرفتم که بتونه پسوردش رو تغییر بده ولی مشکلی که دارم اینه که میخوام قبل از این که رمزش رو تغییر بده رمز قبلی رو وارد کنه تا این جا پیش رفتم که بدون تایید رمز قبلی بتونه پسورد رو تغییر بده
ممنون میشم راهنمایی کنید
قسمت web.php
Route::namespace('Profile')->middleware(['auth', 'verified'])->group(function () {
Route::resource('/changePassword', 'changePasswordController', ['only' => ['index', 'update']]);
});
قسمت changePassword.blade.php
@extends('layouts.master')
@section('title' , 'Change Password')
@section('content')
<div class="Profile" dir="rtl">
<div class="row container">
<aside class="sidebarWrap sidebar-group col-sm-12 col-md-4 col-lg-3 col-xl-3 ">
@include('userPanel.sidebar')
</aside>
<div id="main" class="col-sm-12 col-md-8 col-lg-9 col-xl-9">
<div class="personal_information">
<p class="bold" id="blue_icon" class="">بروزرسانی گذرواژه</p>
</div>
@include('admin.layouts.adminErrors')
<div class="row container personal_information">
<div class="col-sm-12 col-md-12 col-lg-12 col-xl-12">
<div class="tab-content">
<div class="tab-pane active" id="home">
<form class="form row" action="{{ route('changePassword.update', ['changePassword' => $user->id]) }}" method="POST" id="registrationForm" style="margin-bottom: 0px;padding-right: 0.75rem;font-size: 18px;font-weight: bold;">
@csrf
@method('PATCH')
<div class=" col-sm-12 col-md-12 col-lg-6 col-xl-6">
<div class="form-group">
<div class="col-xs-6">
<label for="first_name">
<p>گذرواژه فعلی:</p>
</label>
<input type="password" name="current_password" class="form-info" id="inputPassword" placeholder="********" title="enter your first name if any.">
</div>
</div>
</div>
<div class="col-sm-12 col-md-12 col-lg-6 col-xl-6 ">
<div class="form-group">
<div class="col-xs-6">
<label for="nationalCode">
<p>گذرواژه جدید:</p>
</label>
<input type="password" name="password" class="form-info" id="inputPassword2" placeholder="********" title="enter your nationalCode.">
</div>
</div>
<div class="form-group">
<div class="col-xs-6">
<label for="nationalCode">
<p>تایید گذرواژه جدید:</p>
</label>
<input type="password" name="password_confirmation" class="form-info" id="inputPassword2" placeholder="********" title="enter your nationalCode.">
</div>
</div>
</div>
<button class="btn btn-submit " type="submit">بروزرسانی</button>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
قسمت changePasswordController.php
<?php
namespace App\Http\Controllers\Profile;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class changePasswordController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$user = Auth::user();
return view('userPanel.changePassword', compact('user'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, User $changePassword)
{
if (!is_null($request->password)) {
$request->validate([
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
$data['password'] = $request->password;
}
$changePassword->update($data);
return redirect(route('userPanel.index'));
}
}
با اساس کد خودتون یه همچین چیزی میشه (با گوشی یه مقدار سخته نوشتن کد، شاید اشکال سینتکسی داشته باشه
$request->validate([
'password' => ['required', 'string', 'min:8', 'confirmed'],
'old_password' => ['required'],
]);
if (Hash::check($request->old_password, $changePassword->password)) {
$data['password'] = $request->password;
$changePassword->update($data);
}
دقت کنید که فیلد oldpassword رو باید در view از کاربر دریافت کنید.
و تابع هش هم باید user بشه
use Illuminate\Support\Facades\Hash;
میتونید همزمان با رمز جدید رمز قدیم کاربر رو هم دریافت کنید با کد زیر چک کنید که رمزش درست هست یا نه خروجی بهتون true false میده
Hash::check('INPUT PASSWORD', $user->password);
@mehranmarandi90 دقیق نمیدم چطوری توی کدم بزارمش میشه بیشتر راهنمایی کنید
الان به این شکل نوشتم درسته؟
public function update(Request $request, User $changePassword)
{
if (Hash::check('current_password', $changePassword->password)) {
if (!is_null($request->password)) {
$request->validate([
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
$data['password'] = $request->password;
}
$changePassword->update($data);
}
return redirect(route('userPanel.index'));
}
با اساس کد خودتون یه همچین چیزی میشه (با گوشی یه مقدار سخته نوشتن کد، شاید اشکال سینتکسی داشته باشه
$request->validate([
'password' => ['required', 'string', 'min:8', 'confirmed'],
'old_password' => ['required'],
]);
if (Hash::check($request->old_password, $changePassword->password)) {
$data['password'] = $request->password;
$changePassword->update($data);
}
دقت کنید که فیلد oldpassword رو باید در view از کاربر دریافت کنید.
و تابع هش هم باید user بشه
use Illuminate\Support\Facades\Hash;
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟