به تازگی لاراول 6.2 با یک امکان جدید در قسمت تایید رمز ورود منتشر شده است. این ویژگی به شما این امکان را می دهد که قبل از اجازه دسترسی به یک مسیر به یک کاربر که لاگین کرده است از او درخواست کنید که رمز عبور خود را دوباره ورد نماید.
این عملکرد در بسیاری از سایت ها در حال استفاده است برای مثال می توان سایت گیت هاب را مثال زد. اما اگر بخواهید این ویژگی را استفاده کنید باید به شکل زیر با آن کار کنید:
ستاپ (Setup):
در ابتد و برای شروع کار بایستی یک پروژه لاراولی را ایجاد کنید تا بتوانیم نحوه کار این ویژگی را بهتر نمایش بدهیم ،به همین منظور به شکل زیر یک پروژه ایجاد می کنیم:
composer create-project --prefer-dist laravel/laravel confirm-app
cd confirm-app
composer require laravel/ui --dev
در مقالات قبلی روش استفاده و ایجاد لاگین در نسخه جدید لاراول 6 را برای شما توضیح داده ایم که می توانید برای یادآوری آن مطلب را مطالعه کنید.
خب حالا بیایید یک کد مجوز را برای پروژه خود ایجاد کنیم:
php artisan ui vue --auth
yarn install
yarn dev
در مرحله بعد ، اجازه دهید یک پایگاه داده SQLite را پیکربندی کنیم (در صورت تمایل میتوانید از درابور های دیگر استفاده کنید):
touch database/database.sqlite
با دستور بالا ما فایلی را که لاراول هنگام استفاده از sqlite به دنبال آن خواهد بود را ایجاد کرده ایم اما نیاز است تا تغییراتی را نیز در فایل .env ایجاد کنیم و این فایل را با مسیر صحیح اتصال به پایگاه داده به روز کنیم. مانند شکل زیر:
DB_CONNECTION=sqlite
# ...
# Use the default path of the sqlite driver
# DB_DATABASE=laravel
خب در ادامه دستور migration را اجرا میکنیم و در ادامه یک کاربر ایجاد می کنیم:
php artisan migrate
به کمک دستور factory() یک کاربر تستی ایجاد می کنیم:
php artisan tinker
>>> $user = factory(App\User::class)->create([
... 'password' => bcrypt('secret'),
... 'email' => 'admin@example.com'
... ]);
ایجاد کردن کنترلر ها:
بیایید فرض کنیم که شما می خواهید کاربران قبل از مشاهده عملکرد مدیریتی مانند اضافه کردن کلید SSH ، دوباره رمزعبور خود را تأیید کنند. ما می خواهیم کاربر رمز عبور خود را دوباره در پنجره پیکربندی شده وارد کند (پیش فرض 3 ساعت است).
حالا ما یک روت (route) جعلی (fake) با مسیر /settings/ssh/create ایجاد می کنیم که در این مسیر به تایید رمز (درخواست رمز) نیاز باشد. در این صورت قبل از اینکه کاربر بتواند یک کلید جدید تعریف کند نیاز است رمز خود را تایید کند:
php artisan make:controller Settings/SSHController
در ادامه یک متد (اکشن ،عمل) برای کنترلر ایجاد می کنیم. همانند زیر:
namespace App\Http\Controllers\Settings;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class SSHController extends Controller
{
public function create()
{
return view('secret');
}
}
در ادامه یک قالب ایجاد می کنیم و آن را در ریشه ی view قرار می دهیم. به این شکل resources/views/secret.blade.php. و کد زیر را در داخل آن قرار می دهیم:
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<h1>Add a New SSH Key</h1>
<p>This page is only shown after password confirmation.</p>
</div>
</div>
</div>
@endsection
در زمان نوشتن شما نیاز است تا فایل auth/passwords/confirm.blade.php را در پروژه خود کپی کنید. شما می توانید با کلیک روی این متن به آدرس ui/confirm.stub. رفته و آن را دانلود کنید. سپس فایل را کپی کرده و در آدرس زیر درون پروژه خود قرار بدهید:
resources/views/auth/passwords/confirm.blade.php
حالا نیاز است تا فایل routes/web.php را با ویرایشگر خود باز کنید و آن را تغییر دهید و کد زیر را در آن قرار بدهید:
Route::namespace('Settings')
->middleware(['auth'])
->group(function () {
Route::get('/settings/ssh/create', 'SSHController@create')->middleware('password.confirm');
});
توجه: به طور معمول ، شما می توانید تمام مسیرهایی را که به مسیر تأیید اعتبار (تایید رمز) احتیاج دارند ، گروه بندی کنید. برای این منظور و به شکل نمایشی ، ما با استفاده از یک مسیر کنترل کننده در فضای نام (namespace) تنظیمات (Settings) ایجاد می کنیم
با این کار شما بعد از لاگین کردن به آدرس خانه (/home) منتقل می شوید. سپس از آنجا به مسیر /settings/ssh/create بروید و خواهید دید که از صفحه درخواست تایید رمز نمایش داده خواهد شد و از شما می خواهد با رمز خود عملیات تایید اعتبار را انجام دهید.
اگر شما این آموزش را کامل و به درستی دنبال کرده باشید نیاز است رمز را وارد کنید و فرم را تایید و ارسال کنید. سپس بعد از تایید رمز درصورت رفرش دوباره یا درخواست دوباره این آدرس شما نیاز به تایید دوباره نخواهید داشت.
با استفاده از helper جدید ddd() در SSHController::create() می توانید مشخص کنید تا جلسه کاری شما به چه شکلی باشد و چه زمانی دوباره درخواست تایید انجام شود:
public function create()
{
ddd(session('auth'));
return view('secret');
}
این مقدار زمانی را که تایید انجام شده است را به شکل محرمانه نگهداری می کند و نشان می دهد و به شکل پیشفرض 3 ساعت است. از طریق تغییر مقدار config('auth.password_timeout') می توانید مشخص کنید تا چه زمانی از کابر تایید دوباره درخواست نشود (یا بعد از چه مدت زمان دوباره تایید رمز درخواست شود). برای جزییات بیشتر به آدرس زیر مراجعه کنید:
نظر شما چیست؟ شما می توانید نظرات ،پیشنهادات و اطلاعات خود را در رابطه با این مطلب و موضوعات مربوط از طریق قسمت نظرات با ما و سایر بازدیدکنندگان در میان بگذارید.