درخواست های فرم Laravel کلاس های خاصی هستند که قابلیت استفاده از کلاس های درخواست منظم را افزایش می دهند و ویژگی های پیشرفته ای برای اعتبارسنجی را فراهم می آورد. درخواست های فرم همچنین به منظم نگه داشتن اقدامات کنترل کننده کمک می کند ، زیرا می توانید تمام منطق اعتبار خود را به کلاس درخواست فرم منتقل کنید. مزیت دیگر این است که به شما امکان می دهد تا قبل از رسیدن به اقدامات کنترل کننده خود ، درخواست ها را فیلتر کنید.
در این راهنما ، مرحله تأیید گذرواژه را برای شما اجرا خواهیم کرد تا درخواست کنید که یک کاربر رمز عبور خود را قبل از دسترسی به ناحیه ادمین تأیید کند. این عمل به عنوان یک بررسی مضاعف عمل می کند و یک لایه امنیتی بیشتر برای برنامه شما فراهم می کند.
پیش نیازها
برای دنبال کردن این راهنما ، به یک برنامه کاربردی Laravel 5.6+ با ستاپ داخلی تأیید اعتبار Laravel نیاز دارید. لطفاً برای جزئیات بیشتر در مورد چگونگی تنظیم این کار ، مستندات رسمی را مطالعه کنید.
مرحله 1 – ایجاد نما
قصد داریم با تنظیم صفحه پروفایل ویرایش کاربر شروع کنیم.
در زمان نوشتن این آموزش ، ابزار فرمان artisan نمایی ایجاد نمی کرد ، بنابراین ما نیاز به ایجاد نما به صورت دستی داریم.
فایل resources/views/profile/edit.blade.php را ایجاد کرده و کد زیر را اضافه کنید.
@extends(‘layouts.app’)

@section(‘content’)
<div class=”container”>
@if (session(‘info’))
<div class=”row”>
<div class=”col-md-12″>
<div class=”alert alert-success alert-dismissible”>
<button type=”button” class=”close” data-dismiss=”alert” aria-hidden=”true”>×</button>
{{ session(‘info’) }}
</div>
</div>
</div>
@elseif (session(‘error’))
<div class=”row”>
<div class=”col-md-12″>
<div class=”alert alert-danger alert-dismissible”>
<button type=”button” class=”close” data-dismiss=”alert” aria-hidden=”true”>×</button>
{{ session(‘error’) }}
</div>
</div>
</div>
@endif
<div class=”row”>
<div class=”col-md-8 col-md-offset-2″>
<div class=”panel panel-default”>
<div class=”panel-heading”>Update Profile</div>

<div class=”panel-body”>
<form class=”form-horizontal” method=”POST” action=”{{ route(‘profile.update’, [‘user’ => $user]) }}”>
{{ csrf_field() }}
{{ method_field(‘PUT’) }}
<div class=”form-group{{ $errors->has(‘name’) ? ‘ has-error’ : ” }}”>
<label for=”name” class=”col-md-4 control-label”>Name</label>
<div class=”col-md-6″>
<input id=”name” type=”text” class=”form-control” name=”name” value=”{{ $user->name }}”>

@if ($errors->has(‘name’))
<span class=”help-block”>
<strong>{{ $errors->first(‘name’) }}</strong>
</span>
@endif
</div>
</div>

<div class=”form-group{{ $errors->has(‘password’) ? ‘ has-error’ : ” }}”>
<label for=”password” class=”col-md-4 control-label”>Password</label>

<div class=”col-md-6″>
<input id=”password” type=”password” class=”form-control” name=”password”>

@if ($errors->has(‘password’))
<span class=”help-block”>
<strong>{{ $errors->first(‘password’) }}</strong>
</span>
@endif
</div>
</div>

<div class=”form-group”>
<label for=”password-confirm” class=”col-md-4 control-label”>Confirm Password</label>

<div class=”col-md-6″>
<input id=”password-confirm” type=”password” class=”form-control” name=”password_confirmation”>
</div>
</div>

<div class=”form-group{{ $errors->has(‘current_password’) ? ‘ has-error’ : ” }}”>
<label for=”current-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”>

@if ($errors->has(‘current_password’))
<span class=”help-block”>
<strong>{{ $errors->first(‘current_password’) }}</strong>
</span>
@endif
</div>
</div>

<div class=”form-group”>
<div class=”col-md-6 col-md-offset-4″>
<button type=”submit” class=”btn btn-primary”>
Update
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

در صفحه “ویرایش نمایه” ما ، یک پیام فلش info  و error  را بررسی می کنیم و آن را به کاربر نمایش می دهیم.
این قسمت دارای فیلدهای نام ، رمزعبور ، گذرواژه ، تأیید رمزعبور و رمز عبور فعلی است.
روشی که ما می خواهیم آن را عملیاتی کنیم این است که هر زمان که کاربر تغییری ایجاد کرد ، باید فیلد صحیح پسورد فعلی را برای ارائه به روزرسانی به دیتابیس ارائه دهند.
فیلدهای رمزعبور و تایید رمز عبور به کاربر امکان تغییر رمز عبور خود را می دهد. در صورت خالی ماندن ، گذرواژه فعلی کاربر حفظ خواهد شد و هیچ تغییری در رمز عبور ذخیره شده آنها ایجاد نمی شود.
متغیرهای اصلی در نمای ما فیلدهای رمز عبور ، تایید رمز عبور ، و رمز عبور فعلی هستند.
همانند فیلد نام ، یک مثال برای گسترش و افزودن فیلدهای بیشتر به فایل شما ارائه میدهد.
مرحله 2 – ایجاد درخواست فرم
اکنون به مهمترین قسمت این آموزش میپردازیم.
دستور زیر را برای ایجاد درخواست فرم اجرا کنید.
⦁ php artisan make:request UpdateProfile

دستور فوق فایلی را با نام app / Http / Requests / UpdateProfile.php ایجاد می کند.
کلیه تغییرات کد در این بخش در این فایل ایجاد می شود.
اولین کاری که باید انجام دهیم دادن نام مستعار به  Laravel’s Hash facade قبل از اعلامیه کلاس است.
use Illuminate\Support\Facades\Hash;
Copy
در مرحله بعد ، از آنجا که در درخواست فرم خود تایید هویت را انجام نمی دهیم ، باید از روش authorize  خود true  را برگردانیم.
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

روش قوانین آرایه ای را ارائه می دهد که به تشریح قوانین اعتبارسنجی برای این درخواست می پردازد.
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
‘name’ => ‘required|string|max:255’,
‘password’ => ‘nullable|required_with:password_confirmation|string|confirmed’,
‘current_password’ => ‘required’,
];
}

قوانین name  و current_password خود توصیفی هستند.
قوانین password  بیان می کند که رمز عبور با استفاده از اعلامیه confirmed  تأیید می شود.
همچنین required_with:password_confirmation را اعلام می کند به این معنی که اگر کاربر تأیید رمز عبور را ارائه دهد ، باید رمز عبور نیز ارائه کند.
این قوانین اعتبارسنجی به طور خودکار پس از هر درخواستی که در عملکرد کنترلر خود تایپ کنیم ، بررسی می شوند.
آخرین کاری که باید انجام دهیم اینست که یک روش withValidator  روی درخواست خود اعلام کنیم که قبل از ابطال هرگونه قانون اعتبارسنجی ، نمونه اعتبار سنجی کاملاً ساخته شده را وارد کند.
/**
* Configure the validator instance.
*
* @param \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
// checks user current password
// before making changes
$validator->after(function ($validator) {
if ( !Hash::check($this->current_password, $this->user()->password) ) {
$validator->errors()->add(‘current_password’, ‘Your current password is incorrect.’);
}
});
return;
}

در داخل روش withValdator ، قلاب after را اضافه کرده ایم ، عملکردی که بعد از انجام همه بررسی های اعتبار سنجی ، اجرا خواهد شد.
در قلاب after ، گذرواژه ارائه شده کاربر را با گذرواژه آنها در پایگاه داده مقایسه کردیم.
$ this-> current_password مقدار فعلی فیلد فرم شکل فعلی current_password را به ما می دهد در حالی که Laravel به ما اجازه می دهد تا با استفاده از $ this-> user ()به کاربر معتبر فعلی دسترسی داشته باشیم ، بنابراین $this->user()->password رمز عبور درهم سازی شده کاربر ذخیره شده در پایگاه داده را به ما میدهد.
این دو گذرواژه با استفاده از روش Hash facade’s check مقایسه می شوند.
در صورت عدم موفقیت آمیز بودن بررسی hash ، خطایی با کلید current_password با استفاده از $validator->errors()->add(‘current_password’, ‘Your current password is incorrect.’). به اعتبار سنج اضافه میشود.
در اینجا درخواست فرم کامل UpdateProfile ما آمده است.
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

use Illuminate\Support\Facades\Hash;

class UpdateProfile extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
‘name’ => ‘required|string|max:255’,
‘password’ => ‘nullable|required_with:password_confirmation|string|confirmed’,
‘current_password’ => ‘required’,
];
}

/**
* Configure the validator instance.
*
* @param \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
// checks user current password
// before making changes
$validator->after(function ($validator) {
if ( !Hash::check($this->current_password, $this->user()->password) ) {
$validator->errors()->add(‘current_password’, ‘Your current password is incorrect.’);
}
});
return;
}
}

مرحله 3 – تنظیم کنترلر
برای استفاده از درخواست فرم ، لازم است که آن را در عملکرد کنترلر خود تایپ کنید.
دستور زیر را برای تولید کنترلر پروفایل انجام دهید.
⦁ $ php artisan make:controller ProfileController

فایل app/Http/Controllers/ProfileController.php را باز کنید و اقدامات کنترلی زیر را اضافه کنید.
public function __construct()
{
$this->middleware(‘auth’);
}

/**
* Show the form for editing the specified resource.
*
* @param \App\User $user
* @return \Illuminate\Http\Response
*/
public function edit(Request $request, User $user)
{
// user
$viewData = [
‘user’ => $user,
];
// render view with data
return view(‘profile.edit’, $viewData);
}

/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\User $user
* @return \Illuminate\Http\Response
*/
public function update(UpdateProfile $request, User $user)
{
// form data
$data = $request->all();
$user->update($data);
return redirect(route(‘profile.edit’, [‘user’ => $user]))
->with(‘info’, ‘Your profile has been updated successfully.’);
}

سازنده كنترلر پروفایل ، ميان افزار auth را تنظیم مي كند تا مطمئن شود كاربر قبل از ويرايش مشخصات خود وارد شده است.
عملکرد ویرایش با داده های نما ، view را نشان میدهد در حالی که عملکرد به روزرسانی نمایه کاربر را به روز می کند و پیغام فلش مربوط به صفحه نمایه ویرایش را مجدداً برمیگرداند.
به امضای عملکرد ویرایش توجه داشته باشید ، جایی که ما درخواست UpdateProfile را تایپ کرده ایم ، که همه کاری است که باید انجام دهیم تا اعتبارات داخل درخواست فرم UpdateProfile را باطل کنیم.
همچنین باید قبل از اعلام کلاس کنترلر، درخواست فرم و مدل کاربر را مستعار کنید.
use App\Http\Requests\UpdateProfile;
use App\User;

مرحله 4 – تنظیم مسیرهای محافظت شده و جهش های داده
فایل app/routes/web.php را باز کنید و کد زیر را برای اتصال به اقدامات کنترلر اضافه کنید.
Route::get(‘/profile/{user}/edit’, ‘ProfileController@edit’)->name(‘profile.edit’);
Route::put(‘/profile/{user}’, ‘ProfileController@update’)->name(‘profile.update’);

براساس قانون اعتبارسنجی که قبلاً به درخواست فرم خود اضافه کردیم ، امکان عبور رمز عبور null وجود دارد.
تحت هیچ شرایطی کاربر (یا یک توسعه دهنده برنامه) نمی خواهد رمزعبور خود را به صورت تهی یا رشته ای خالی تنظیم کند.
برای اطمینان از اینکه گذرواژه کاربر فقط بعد از وارد کردن توسط آن ها، تنظیم شده است ، قصد داریم از جهش دهنده های Eloquent ORM استفاده کنیم.
فایل app/User.php را باز کنید و کد زیر را اضافه کنید.
// Only accept a valid password and
// hash a password before saving
public function setPasswordAttribute($password)
{
if ( $password !== null & $password !== “” )
{
$this->attributes[‘password’] = bcrypt($password);
}
}

جهش دهنده های فصیح باید از طرح نامگذاری set<camel-cased-attribute-name>Attribute پیروی کنند.
از آنجا که ما در حال اعلام یک جهش دهنده برای ویژگی رمز عبور هستیم ، از این رو جهشگر را setPasswordAttribute نامگذاری کرده ایم.
تابع جهشگر مقدار تعیین شده را منتقل می کند که در جهشگر ما متغیر $password است.
در جهشگر ما ، بررسی می کنیم که آیا متغیر $password null یا یک رشته خالی نباشد و آن را با استفاده از $this->attributes[‘password’] در مدل خود تنظیم می کنیم.
همچنین توجه داشته باشید که گذرواژه قبل از ذخیره کردن hashed شده است ، بنابراین نیازی نیست که آن را در جای دیگری در برنامه خود انجام دهیم.
Auth/RegisterController و Auth/ResetPasswordController پیش فرض Laravel نیز پسورد را قبل از نگهداری آن در دیتابیس دارند، بنابراین باید بعد از اعلام جهش فوق ، روش create  و resetPassword  را در کنترلرهای مربوطه به روز کنیم.
فایل app/Http/Controllers/Auth/RegisterController.php را باز کرده و کد زیر را اضافه کنید.
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
‘name’ => $data[‘name’],
’email’ => $data[’email’],
‘password’ => $data[‘password’],
]);
}

فایل app/Http/Controllers/Auth/ResetPasswordController.php را باز کرده و کد زیر را اضافه کنید.
/**
* Reset the given user’s password.
*
* @param \Illuminate\Contracts\Auth\CanResetPassword $user
* @param string $password
* @return void
*/
protected function resetPassword($user, $password)
{
$user->password = $password;

$user->setRememberToken(Str::random(60));

$user->save();

event(new PasswordReset($user));

$this->guard()->login($user);
}

برای ResetPasswordController ، همچنین باید کلاسهای مربوطه را که قبل از اعلام کلاس استفاده می شود ، مستعار کنید.
use Illuminate\Support\Str;
use Illuminate\Auth\Events\PasswordReset;

کار ما تمام شد و تأیید رمز عبور ما مطابق آنچه انتظار می رود کار می کند.
اجرای آزمایشی برنامه هنگام ارائه یک رمزعبور نادرست یا خالی گذاشتن آن، نتیجه زیر را به همراه دارد که توسط تصاویر نشان داده شده است.

نتیجه
در این راهنما ، چگونگی اجرای مرحله اضافی تأیید گذرواژه را برای اثبات اینکه کاربر مجاز به دسترسی به یک ناحیه ادمین است ، مشاهده کردیم. همچنین شاهد نحوه ایجاد و تنظیم درخواست فرم برای اجرای اعتبار سنجی فرم در یک برنامه Laravel بودیم.
برای کسب اطلاعات بیشتر در مورد اعتبار سنجی و درخواست فرم ، می توانید مستندات رسمی Laravel را بررسی کنید.

 

 

از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :

استفاده از nsh برای دستورات از راه دور اوبونتو 18 –  میزبانی وب سایت با Caddy اوبونتو 18

تنظیم سرور ذخیره سازی آبجکت با استفاده از Minio در اوبونتو 18  –  ضبط و اشتراک گذاری ترمینال با Terminalizer اوبونتو

تنظیم مسیریابی شرطی و پاسخگو با React Router v4  –  ایجاد یک URL کوتاه کننده با Django و GraphQL

یک برنامه ردیابی سلامت را با React ،GraphQL و Okta –  ساخت برنامه چت زمان حقیقی React و GraphQL

به روزرسانی فیلترهای مرتب سازی Angular (زاویه ای) –  با استفاده از React ، Superagent و API اینستاگرام

نحوه ساختن یک برنامه جهانی با Nuxt.js و Django –  دکمه دانلود با ریزتعاملات با CSS ، anime.js و segment.js

نحوه اضافه کردن عکسهای پیشرفته در Node و Express  –  با Vue ،GraphQL و Apollo Client یک وبلاگ ساخت

یک برنامه SSR با روتر Preact ، Unistore و Preact بسازید  –  ساخت برنامه های وب پیشرونده با Angular

اشکال زدایی JavaScript در تولید با نقشه های منبع  –  می توان با Koa برنامه “سلام جهانی” ساخت

ساختن یک برنامه با Node ، React ، Okta  –   مدیریت حالت فرم در React با Redux Form

نحوه تنظیم Laravel ، Nginx و MySQL  –  ارتقاء از AngularJS به Angular با ngUpgrade

استفاده از ویژوال استودیو از راه دور  –  احراز هویت API با JSON Web Tokens و Passport

راه اندازی یک پروژه React با Parcel  –  ایجاد Swiper مانند Netflix را در Vue

ساختن یک ربات تلگرام با Laravel و BotMan  –  استفاده از map، filter، و reduce در جاوااسکریپت

چگونه می توان موتور جستجوی زمان واقعی را با Vue  –  ساختن سیستم مستندات (Documentation) با Vue و VuePress

استفاده از اشتراک زنده با کد ویژوال استودیو  –  ساخت یک مقیاس اندازه گیری قدرت رمز عبور را در React

شروع عملی GraphQL با Node.js و Express  –  ساخت یک برنامه آب و هوا در Django

نحوه نصب Discourse روی Ubuntu 18  –  تأیید رمز عبور با استفاده از درخواست فرم Laravel

نحوه نصب MySQL در CentOS 8  –  استفاده از پسوند PDO PHP برای انجام تراکنش MySQL

نصب و پیکربندی SNMP Daemon و Client در Ubuntu 18  –  نصب Linux، Nginx، MariaDB،PHP در Debian 10

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکاخرید سرور مجازی ارزان هلندvpsخرید vps هلندخرید سرور مجازی آمریکاخرید vps فرانسهتست vpsسرور مجازی تستسرور مجازی ویندوزارزانترین vpsخرید وی پی اسvps ارزان – 

برچسب‌ها:,