لاراول در جدیدترین نسخه خود قابلیتهای زیادی را در سیستم احراز هویت خود قرار داده است و باعث راحتی کار و در دسترس قرار دادن امکانات بیشتری به توسعه دهندگان شده است. در این مقاله تمامی موارد سیستم احراز هویت لاراول را بررسی میکنیم. دو ایدهی کاربردی در مورد سفارشی کردن احراز هویت لاراول را نیز مورد بررسی قرار میدهیم و پیاده سازی میکنیم.
در اولین مرحله از طریق خط فرمان و با دستور composer جدیدترین نسخه لاراول ( که در اینجا 7.12 است) را نصب میکنیم.
composer create-project --prefer-dist laravel/laravel AuthSystem
لاراول به صورت پایه یک پکیج برای احراز هویت در نظر گرفته است که شامل فرانت اند و ظاهر فرمهای ورود، ثبت نام و فراموشی رمزعبور است. همچنین در زمانی که پروژه را ایجاد میکنید یک مدل User و Controllerهای مربوط به موارد بالا را ایجاد میکند. فایلهای Controller بخش احراز هویت در مسیر app/Http/Controller/Auth موجود میباشد.
برای ایجاد فرمهای ورود، ثبت نام و فراموشی رمزعبور باید پکیج مرتبط را طبق دستور زیر در خط فرمان اجرا و نصب کنید.
composer require laravel/ui
بعد از نصب پکیج مورد نظر برای فعال سازی و ایجاد فایلهای Blade در لاراول نیاز است دستور زیر را در خط فرمان اجرا کنید.
php artisan ui vue --auth
بعد از اجرای دستور بالا دو پوشه به نامهای auth و layouts در مسیر resources/views و همچنین یک فایل home.blade.php ساخته میشود.
این دستور به غیر از ساخت فرم ها، مسیرهای (Routes) احراز هویت را نیز میسازد که به شکل زیر است.
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
آخرین مسیر برای زمانی است که وقتی وارد سایت شدید به آن باز خواهید گشت.
npm install && npm run dev
در لاراول به طور پیشفرض از مدل User برای کاربران و احراز هویت استفاده میشود ولی شما میتوانید این مدل را عوض کنید که در ادامه به شما توضیح خواهیم داد.
در حال حاضر ما از این مدل استفاده میکنیم و در مرحلهی اول نیاز است در پایگاه داده جدول این مدل ساخته شود.
فایل Migration جدول کاربران در مسیر database/migartions و با نام 2014_10_12_000000_create_users_table.php وجود دارد. اگر نیاز به اطلاعات بیشتری دارید میتوانید در این فایل ستونهایی اضافه کنید تا اطلاعات کاربر در آن ساخته شود.
دستور زیر را اجرا کنید تا جداول در پایگاه داده ساخته شود.
php artisan migrate
حال میتوانید از طریق مسیرهای بالا ثبت نام کنید و یا وارد شوید.
به صورت پیشفرض لاراول بعد از ورود شما را به مسیر http://127.0.0.1:8000/home هدایت میکند که میتوانید این آدرس را تغییر دهید.
برای تغییر آدرس به مسیر app/Providers و فایل RouteServiceProvider.php بروید و متغیر HOME را در خط 24 به شکل زیر تغییر دهید.
public const HOME = '/dashboard';
همچنین میتوانید یک متغیر دیگر تعریف کنید و اسم آن را DASHBOARD بگذارید و بعد در فایل LoginController.php در متغیر redirectTo به RouteServiceProvider::DASHBOARD تغییر دهید. ولی ما فعلا این کار را نمیکنیم. (دلیلی هم ندارد :))
در مرحلهی بعد باید مسیر مربوط به dashboard/ را بسازید. در فایل routes/web.php کد زیر را اضافه کنید.
Route::get('/dashboard', 'HomeController@dashboard')->name('dashboard');
بعد برای نمایش فایل Blade پیشخوان در فایل HomeController.php متد زیر را اضافه کنید.
public function dashboard()
{
return view('home');
}
در صورت نیاز میتوانید فایل Blade مورد نظر خود را نوشته و در تابع view اسم فایل را بنویسید.
ایده به این صورت است که ما یک فیلد ورودی برای نام کاربری و ایمیل داریم که کاربر میتواند هم با ایمیل و هم با نام کاربری ثبت شده در سایت وارد شود.
در مرحله اول باید یک فیلد برای نام کاربری در جدول users ایجاد کنیم. فایل Migration مربوط به جدول کاربران را باز کنید و متد up را به صورت زیر تغییر دهید.
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('username')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
یک فیلد username را اضافه کردیم که نام کاربری کاربر را در آن ذخیره کنیم و یکتا است زیرا نمیتوانیم چند نام کاربری داشته باشیم.
برای تازه سازی جداول پایگاه داده دستور زیر را در خط فرمان اجرا کنید.
php artisan migrate:refresh
این کار تمامی Migrationها را پاک میکند و از اول اجرا میکند پس توجه داشته باشید اطلاعات نیز حذف خواهند شد.
در این مرحله باید فایل Blade مربوط به ثبت نام کاربر را تغییر دهیم تا کاربر موقع ثبت نام بتواند نام کاربری را نیز انتخاب کند.
فایل resources/views/auth/register.blade.php را به صورت زیر تغییر دهید.
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Register') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('register') }}">
@csrf
<div class="form-group row">
<label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>
<div class="col-md-6">
<input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>
@error('name')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="username" class="col-md-4 col-form-label text-md-right">{{ __('Username') }}</label>
<div class="col-md-6">
<input id="username" type="username" class="form-control @error('username') is-invalid @enderror" name="username" value="{{ old('username') }}" required autocomplete="username">
@error('username')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>
<div class="col-md-6">
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Register') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
یک فیلد به نام username اضافه کردیم.
در فرم ورود نیز باید یک فیلد یکسان برای ایمیل و نام کاربری تعریف کنیم. فایل resources/views/auth/login.blade.php را به صورت زیر تغییر دهید.
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Login') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="form-group row">
<label for="login" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address Or Username') }}</label>
<div class="col-md-6">
<input id="login" type="text" class="form-control @error('login') is-invalid @enderror" name="login" value="{{ old('login') }}" required autocomplete="login" autofocus>
@error('login')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<div class="col-md-6 offset-md-4">
<div class="form-check">
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
<label class="form-check-label" for="remember">
{{ __('Remember Me') }}
</label>
</div>
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-8 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Login') }}
</button>
@if (Route::has('password.request'))
<a class="btn btn-link" href="{{ route('password.request') }}">
{{ __('Forgot Your Password?') }}
</a>
@endif
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
فیلد email را به login تغییر دادیم و بعد در بخش Controller بررسی میکنیم که کاربر ایمیل یا نام کاربری را وارد کرده است.
اگر به بخش ثبت نام مراجعه کنید و یک کاربر ثبت کنید با خطا مواجه میشوید که میگوید فیلد username در دیتابیس یک مقدار پیشفرض ندارد. این بدین معنی است که شما نام کاربری که در فرم ثبت نام وارد میکنید در مدل User ثبت نمیشود.
این مشکل به طور عمده از بخش fillable در مدل مورد نظر است.
به فایل app/User.php رفته و متغیر fillable را به شکل زیر تغییر دهید.
protected $fillable = [
'name', 'email', 'password','username'
];
حال میتوانید یک کاربر ایجاد کنید. به راحتی :)
در مرحلهی اول باید بخش ثبت نام را تغییر دهیم تا هم در اعتبارسنجی و هم در بخش اضافه کردن کاربر فیلد username لحاظ شود.
در فایل RegisterController.php دو متد validator و create را به صورت زیر تغییر دهید.
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'username' => ['required', 'string', 'max:255', 'unique:users,username'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
/**
* 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'],
'username' => $data['username'],
'password' => Hash::make($data['password']),
]);
}
اعتبارسنجی فیلد نام کاربری را به صورت زیر در نظر گرفتهایم.
حال به راحتی میتوانید در سایت ثبت نام کنید.
در مرحلهی بعد باید در فایل Controller مربوط به ورود یک اعتبارسنجی انجام دهیم که چک شود ایمیل یا نام کاربری است.
فایل LoginController.php را به صورت زیر تغییر دهید.
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Login username to be used by the controller.
*
* @var string
*/
protected $username;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
$this->username = $this->findUsername();
}
/**
* Get the login username to be used by the controller.
*
* @return string
*/
public function findUsername()
{
$login = request()->input('login');
$fieldType = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
request()->merge([$fieldType => $login]);
return $fieldType;
}
/**
* Get username property.
*
* @return string
*/
public function username()
{
return $this->username;
}
}
روش کار به این صورت است که یک متغیر به نام username تعریف میکنیم و فیلد ورودی توسط تابع filter_var اعتبارسنجی میشود و اگر ایمیل یا نام کاربری بود در متغیر username ذخیره میشود و بعد از آن از طریق متد username برگردانده میشود و عملیات ورود توسط آن انجام میشود.
حال در یک فیلد میتوانید هم با نام کاربری و هم با ایمیل وارد شوید.
میتوانید در فایلهای Blade پروژه لاراول با دستوراتی که وجود دارد بخشی از View را فقط به کاربرانی که وارد شدهاند نشان دهید و همچنین بخشی از آن را فقط به کاربران مهمان نشان دهید.
با استفاده از کد زیر میتوانید یک بخش را به کاربرانی که وارد شدهاند نشان دهید.
@auth
<p id="newElement">به کاربران مهمان نمایش نده</p>
@else
<p id="newElement">به کاربران مهمان نمایش بده</p>
@endauth
همچنین از متد guest@ برای بررسی شرط مهمان بودن میتوانید استفاده کنید.
@guest
guest users data
@else
logged in users data
@endguest
حال اگر نیاز به اطلاعاتی از کاربر وارد شده، داشته باشید از طریق متدهای زیر میتوانید به آن دسترسی داشته باشید.
{{ Auth::user()->name }} {{-- <- Name of the user --}}
{{ Auth::user()->email }} {{-- <- Email of the user --}}
{{ Auth::user()->id }} {{-- <- id of the user --}}
{{-- Laravel also has shorthand method for id --}}
{{ Auth::id() }} {{-- <- shorthand for id --}}
در صورت استفاده از Auth()->user میتوانید به تمامی اطلاعات کاربر که در دیتابیس شما ذخیره شده است دسترسی داشته باشید.
ممکن است دو بخش برای ورود داشته باشیم. برای مثال یک بخش برای کاربران سایت و یک بخش برای مدیرهای سایت داشته باشیم. در این مورد، نیاز است که بخش احراز هویت مدیرها را خودمان بنویسیم.
در اولین مرحله باید مدل مدیر را بسازیم. با دستور زیر یک مدل، فایل Migration و Controller مربوط به مدل مدیر را میسازیم.
php artisan make:model Admin -mc
حال به فایل Migration مربوط به مدل مدیر در مسیر database/migrations بروید و به شکل زیر آن را تغییر دهید.
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('admins', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
نام، ایمیل و رمز عبور را برای مدیرها قرار دادیم. (شما طبق نیاز خودتان میتوانید هر اطلاعاتی که نیاز دارید را در دیتابیس برای مدیرها ذخیره کنید)
با اجرای دستور زیر جدول مدیرها در دیتابیس ساخته میشود.
php artisan migrate
در فایل مدل مربوط به Admin که در مسیر app/Http قرار دارد نیز نیاز است فیلدهای مورد نظر برای ثبت یک مدیر را در متغیر fillable قرار دهیم. به صورت زیر فایل Admin.php را تغییر دهید.
namespace App;
use Illuminate\Database\Eloquent\Model;
class Admin extends Model
{
//
protected $fillable = [
'name', 'email', 'password',
];
protected $hidden = ['password'];
}
سه مقدار نام، ایمیل و رمز عبور را در متغیر fillable قرار دادیم. همچنین برای پنهان کردن رمزعبور در مواقعی که ممکن است لیست مدیرها یا یک مدیر را برگردانیم، فیلد رمز عبور را در متغیر hidden قرار دادیم.
<?php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins'
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class
]
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
],
'password_timeout' => 10800,
];
در قسمت guards یک گارد جدید با عنوان admin تعریف کردیم و دو مقدار driver و provider که نشان دهندهی نوع گارد است که میتواند session یا token باشد.
session مربوط به احراز هویت توسط سشنها است که از طریق موتور قالب ساز Blade انجام میشود و token مربوط به احراز هویت از طریق api است که در ادامه به آن خواهیم پرداخت.
در قسمت provider نیز مشخص میکنیم این گارد از چه فراهم کنندهای استفاده میکند که در پایینتر آن را تعریف میکنیم.
در قسمت providers یک فراهم کننده (Provider) جدید برای بخش مدیرها تعریف کردیم که عنوان آن admins است و دو مقدار driver و model دارد.
در مقدار driver میتواند eloquent یا database قرار بگیرد. ما در اینجا برای اینکه میخواهیم احراز هویت را از طریق مدل مدیر انجام دهیم پس مقدار eloquent را وارد میکنیم.
در قسمت model نیز مدل مربوط به این فراهم کننده را وارد میکنیم. توجه کنید مدل باید با namespace مرتبط و طبق کد بالا باشد.
حالا ما یک گارد جدید تعریف کردیم و از این پس میتوانیم در قسمتهایی مثل ورود و اعتبارسنجی اینکه کاربر وارد شده است یا نه، از آن استفاده کنیم.
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Admin Login') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('admin.login') }}">
@csrf
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<div class="col-md-6 offset-md-4">
<div class="form-check">
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
<label class="form-check-label" for="remember">
{{ __('Remember Me') }}
</label>
</div>
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-8 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Login') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
فایل admin.blade.php را در کنار فایل ورود بسازید و به شکل زیر طراحی کنید.
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Admin Dashboard</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
You are a cool ADMIN !
</div>
</div>
</div>
</div>
</div>
@endsection
حال دو صفحه ورود و پیشخوان مدیر ما آماده است.
Route::get('/admin/login', 'AdminController@showLoginForm')->name('admin.view_login');
Route::post('/admin/login', 'AdminController@login')->name('admin.login');
Route::get('/admin', 'AdminController@index')->name('admin.dashboard')->middleware('auth:admin');
مسیرهای اول و دوم به ترتیب برای نمایش صفحه فرم ورود و فرستادن اطلاعات ورود، به کار برده میشوند.
مسیر سوم مربوط به نمایش صفحه پیشخوان مدیر است. در مسیر سوم یک middleware قرار دادیم که در آن گفتیم برای دسترسی به آن کاربر باید وارد شود و احراز هویت مربوط به گارد admin باشد.
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AdminController extends Controller
{
use AuthenticatesUsers;
protected $redirectTo = '/admin';
protected function guard()
{
return Auth::guard('admin');
}
public function showLoginForm()
{
return view('admin.login');
}
public function username() :string
{
return 'email';
}
public function index(){
return view('admin.admin');
}
}
در اولین مرحله در خط 11 از یک Trait مربوط به احراز هویت پیشفرض لاراول استفاده کردیم که برای ما توابع پیشفرض را میسازد.
ولی ما توابع مرتبط به بحث خودمان را سفارشی سازی کردیم.
از یک متغیر به نام redirectTo استفاده کردیم تا بعد از ورود به این آدرس منتقل شویم. این کار توسط خود لاراول و فقط با قرار دادن همین متغیر انجام میشود.
در متد guard از گارد تعریف شده توسط خودمان برای مدیرها استفاده کردیم و گفتیم برای این بخش از این گارد استفاده کند تا کاملا با بخش کاربران متفاوت و جداگانه باشد.
در متد showLoginForm فایل View مربوط به ورود مدیرها که در بالاتر آن را ساختیم، نمایش میدهیم.
همچنین در متد username فیلد مورد نظر برای فیلد به عنوان نام کاربری که در اینجا همان ایمیل است را برمیگردانیم.
متد index نیز برای نمایش فایل View پیشخوان مدیر استفاده میشود.
توجه کنید ما متدی به عنوان login را تعریف نکردیم چون که نیاز نیست و به صورت پیشفرض لاراول این کار را طبق تنظیماتی که در بالا اعمال کردیم برای ما انجام میدهد.
php artisan tinker
بعد از اجرای دستور بالا یک خط فرمان که کدهای لاراول و php را اجرا میکند در اختیار شما قرار میگیرد.
کدهای زیر را طبق ترتیب وارد کنید تا یک مدل از مدیر بسازیم و آن را در دیتابیس ذخیره کنیم.
$admin = \App\Admin::create(['name'=>'Vahid','email'=>'vahid@7learn.com','password'=>\Illuminate\Support\Facades\Hash::make(123456)]);
یک مدیر با نام Vahid و ایمیل vahid@7learn.com و همچنین رمزعبور 123456 را ساختیم و حالا اگر دیتابیس خود را چک کنید میبینید یک مدیر در جدول وجود دارد.
حالا میتوانید از طریق آدرس http://127.0.0.1:8000/admin/login به پیشخوان مدیریت وارد شوید.
جمع بندی:
در این مقاله از استفاده احراز هویت پیش فرض لاراول استفاده کردیم و در بخش بعد برای اینکه کاربران بتوانند هم با ایمیل و رمز عبور وارد شوند یک روش پیاده سازی کردیم و در آخر ساخت یک مدل سفارشی و بخش جداگانهای برای ورود مدیرها را توضیح دادیم. در این مقاله تمامی آموزشها به صورت کاربردی و با مثال توضیح داده شد. اگر در مورد این مقاله سوال یا نظری داشتید خوشحال میشویم که با ما و کاربران سون لرن به اشتراک بگذارید.
اگر به یادگیری بیشتر لاراول علاقه داری میتوانی در دوره آموزش لاراول کاربردی (بسته پروژه محور) شرکت کنی، این دوره شامل ۱۲ پروژه کاربردی و پر استفاده در دنیای واقعی است، که تمامی پروژهها به صورت کامل برنامه نویسی خواهند شد، تا دانشجو بتواند با روند ایجاد و تکمیل پروژه به صورت کامل آشنا شود.
$admin = \App\Admin::create([&#39;name&#39;=&gt;&#39;Vahid&#39;,&#39;email&#39;=&gt;&#39;vahid@7learn.com&#39;,&#39;password&#39;=&gt;\Illuminate\Support\Facades\Hash::make(123456)]); ولی خطامیاره The filename, directory name, or volume label syntax is incorrect.این پیغامومیاره
درود حقیقتا تاحالا به این ارور نخوردم اما به طور کلی وقتی دسترسی ادمین روی درایو نداریم چنین چیزی میبینیم. اینو بررسی کنید که به عنوان ادمین درحال کار باشید. باز اگه سایر دوستان نظری دارید دست یاری برسونید بما :)
توی اینجا ``` {{ Auth::user()-&gt;name }} {{-- &lt;- Name of the user --}} {{ Auth::user()-&gt;email }} {{-- &lt;- Email of the user --}} {{ Auth::user()-&gt;id }} {{-- &lt;- id of the user --}} {{-- Laravel also has shorthand method for id --}} {{ Auth::id() }} {{-- &lt;- shorthand for id --}} ``` اگه مثل اینا بخوام یوزرنیم رو بگیرم باید چیکار کنم؟
درود دو راه دارید: 1. {{ Auth::user()->username }} 2. با استفاده از Auth()->user میتوانید به تمامی اطلاعات کاربر که در دیتابیس شما ذخیره شده است دسترسی داشته باشید.
سلام چه جوری میتونم صفحه لاگین چند زبانه بسازم ؟ {{ __('Register') }} مقدار اینا رو از کجا میاره؟
سلام برای بحث چند زبانه میتونید از توابع لاراول مثل ()__ یا ()trans استفاده کنید. مقادیر ترجمه در مسیر resources/lang در قالب فایلهای json و در پوشههای مجزا برای هر زبان موجودن. برای اطلاعات بیشتر به صفحهی <a href="https://laravel.com/docs/8.x/localization" target="_blank" rel="noopener noreferrer nofollow ugc">Localization </a> در وبسایت لاراول مراجعه کنید.
من چند مدل لاگین نوشتم ولی هیچ کدوم درست کار نمیکنن.این مدلی هم که شما گفتید وقتی میخام به جای اییل یا یوزرنیم از کدملی استفاده کنم به ارور میخورم
سلام. اگر مراحل رو درست انجام بدید نباید به خطا بخورید. ارورتون چی هست؟