feat: add user authentication

This commit is contained in:
2026-08-19 08:04:02 +03:30
parent a10bdd20fa
commit 84f095b00f
8 changed files with 1548 additions and 8 deletions
+190
View File
@@ -0,0 +1,190 @@
@extends('layouts.app')
@section('title', 'ورود | آژانس مسافرتی')
@section('content')
<div class="auth-page">
<div class="container">
<div class="auth-card login-card">
{{-- عنوان --}}
<div class="auth-header">
<div class="auth-icon">
<i class="fa fa-sign-in"></i>
</div>
<h1>
ورود به حساب کاربری
</h1>
<p>
برای ورود، نام کاربری یا ایمیل و رمز عبور خود را وارد کنید.
</p>
</div>
{{-- خطاها --}}
@if($errors->any())
<div class="auth-alert auth-alert-danger">
<i class="fa fa-exclamation-circle"></i>
<div>
<strong>
ورود انجام نشد.
</strong>
<ul>
@foreach($errors->all() as $error)
<li>
{{ $error }}
</li>
@endforeach
</ul>
</div>
</div>
@endif
{{-- پیام موفقیت --}}
@if(session('success'))
<div class="auth-alert auth-alert-success">
<i class="fa fa-check-circle"></i>
{{ session('success') }}
</div>
@endif
{{-- فرم --}}
<form
action="{{ route('auth.login.post') }}"
method="POST"
class="auth-form"
>
@csrf
<div class="form-group">
<label for="login">
ایمیل یا نام کاربری
</label>
<input
type="text"
id="login"
name="login"
value="{{ old('login') }}"
class="form-control"
placeholder="ایمیل یا نام کاربری"
dir="ltr"
autocomplete="username"
required
>
</div>
<div class="form-group">
<label for="password">
رمز عبور
</label>
<input
type="password"
id="password"
name="password"
class="form-control"
placeholder="رمز عبور"
autocomplete="current-password"
required
>
</div>
{{-- مرا به خاطر بسپار --}}
<div class="login-options">
<label class="remember-me">
<input
type="checkbox"
name="remember"
value="1"
{{ old('remember') ? 'checked' : '' }}
>
<span>
مرا به خاطر بسپار
</span>
</label>
</div>
{{-- دکمه --}}
<button
type="submit"
class="auth-btn"
>
<i class="fa fa-sign-in"></i>
ورود به حساب
</button>
</form>
{{-- ثبت نام --}}
<div class="auth-footer">
حساب کاربری ندارید؟
<a href="{{ route('auth.register.index') }}">
ثبت‌نام کنید
</a>
</div>
</div>
</div>
</div>
@endsection
+659
View File
@@ -0,0 +1,659 @@
@extends('layouts.app')
@section('title', 'ثبت نام | آژانس مسافرتی')
@section('content')
<div class="auth-page">
<div class="container">
<div class="auth-card register-card">
{{-- =========================================
عنوان
========================================== --}}
<div class="auth-header">
<div class="auth-icon">
<i class="fa fa-user-plus"></i>
</div>
<h1>
ایجاد حساب کاربری
</h1>
<p>
برای استفاده از امکانات سایت، اطلاعات خود را وارد کنید.
</p>
</div>
{{-- =========================================
خطاهای کلی
========================================== --}}
@if($errors->any())
<div class="auth-alert auth-alert-danger">
<i class="fa fa-exclamation-circle"></i>
<div>
<strong>
لطفاً خطاهای زیر را بررسی کنید:
</strong>
<ul>
@foreach($errors->all() as $error)
<li>
{{ $error }}
</li>
@endforeach
</ul>
</div>
</div>
@endif
{{-- =========================================
فرم ثبت نام
========================================== --}}
<form
action="{{ route('auth.register.post') }}"
method="POST"
enctype="multipart/form-data"
class="auth-form"
>
@csrf
{{-- =====================================
اطلاعات شخصی
====================================== --}}
<div class="form-section">
<div class="form-section-title">
<i class="fa fa-user"></i>
اطلاعات شخصی
</div>
<div class="row">
{{-- نام --}}
<div class="col-md-6">
<div class="form-group">
<label for="first_name">
نام
<span>*</span>
</label>
<input
type="text"
id="first_name"
name="first_name"
value="{{ old('first_name') }}"
class="form-control"
placeholder="نام خود را وارد کنید"
maxlength="100"
required
>
</div>
</div>
{{-- نام خانوادگی --}}
<div class="col-md-6">
<div class="form-group">
<label for="last_name">
نام خانوادگی
<span>*</span>
</label>
<input
type="text"
id="last_name"
name="last_name"
value="{{ old('last_name') }}"
class="form-control"
placeholder="نام خانوادگی خود را وارد کنید"
maxlength="100"
required
>
</div>
</div>
{{-- کد ملی --}}
<div class="col-md-6">
<div class="form-group">
<label for="national_code">
کد ملی
<span>*</span>
</label>
<input
type="text"
id="national_code"
name="national_code"
value="{{ old('national_code') }}"
class="form-control"
placeholder="مثلاً 0012345678"
maxlength="10"
inputmode="numeric"
required
>
</div>
</div>
{{-- جنسیت --}}
<div class="col-md-6">
<div class="form-group">
<label for="gender">
جنسیت
<span>*</span>
</label>
<select
id="gender"
name="gender"
class="form-control"
required
>
<option value="">
انتخاب کنید
</option>
<option
value="1"
{{ old('gender') == 1 ? 'selected' : '' }}
>
مرد
</option>
<option
value="2"
{{ old('gender') == 2 ? 'selected' : '' }}
>
زن
</option>
</select>
</div>
</div>
{{-- وضعیت تأهل --}}
<div class="col-md-6">
<div class="form-group">
<label for="marital_status">
وضعیت تأهل
<span>*</span>
</label>
<select
id="marital_status"
name="marital_status"
class="form-control"
required
>
<option value="">
انتخاب کنید
</option>
<option
value="1"
{{ old('marital_status') == 1 ? 'selected' : '' }}
>
مجرد
</option>
<option
value="2"
{{ old('marital_status') == 2 ? 'selected' : '' }}
>
متأهل
</option>
<option
value="3"
{{ old('marital_status') == 3 ? 'selected' : '' }}
>
متارکه
</option>
</select>
</div>
</div>
{{-- نام همسر --}}
<div class="col-md-6">
<div class="form-group">
<label for="spouse_name">
نام و نام خانوادگی همسر
</label>
<input
type="text"
id="spouse_name"
name="spouse_name"
value="{{ old('spouse_name') }}"
class="form-control"
placeholder="در صورت تأهل وارد کنید"
maxlength="200"
>
</div>
</div>
</div>
</div>
{{-- =====================================
اطلاعات تماس
====================================== --}}
<div class="form-section">
<div class="form-section-title">
<i class="fa fa-phone"></i>
اطلاعات تماس
</div>
<div class="row">
{{-- موبایل --}}
<div class="col-md-6">
<div class="form-group">
<label for="mobile">
شماره همراه
<span>*</span>
</label>
<input
type="text"
id="mobile"
name="mobile"
value="{{ old('mobile') }}"
class="form-control"
placeholder="09123456789"
maxlength="11"
inputmode="numeric"
required
>
</div>
</div>
{{-- ایمیل --}}
<div class="col-md-6">
<div class="form-group">
<label for="email">
ایمیل
<span>*</span>
</label>
<input
type="email"
id="email"
name="email"
value="{{ old('email') }}"
class="form-control"
placeholder="example@email.com"
maxlength="150"
dir="ltr"
required
>
</div>
</div>
</div>
</div>
{{-- =====================================
اطلاعات حساب
====================================== --}}
<div class="form-section">
<div class="form-section-title">
<i class="fa fa-lock"></i>
اطلاعات حساب کاربری
</div>
<div class="row">
{{-- نام کاربری --}}
<div class="col-md-6">
<div class="form-group">
<label for="username">
نام کاربری
<span>*</span>
</label>
<input
type="text"
id="username"
name="username"
value="{{ old('username') }}"
class="form-control"
placeholder="مثلاً ali123"
maxlength="100"
dir="ltr"
pattern="[A-Za-z0-9]+"
required
>
<small class="form-help">
فقط حروف انگلیسی و اعداد مجاز است.
</small>
</div>
</div>
{{-- رمز --}}
<div class="col-md-6">
<div class="form-group">
<label for="password">
رمز عبور
<span>*</span>
</label>
<input
type="password"
id="password"
name="password"
class="form-control"
placeholder="رمز عبور"
minlength="8"
required
>
</div>
</div>
{{-- تکرار رمز --}}
<div class="col-md-6">
<div class="form-group">
<label for="password_confirmation">
تکرار رمز عبور
</label>
<input
type="password"
id="password_confirmation"
name="password_confirmation"
class="form-control"
placeholder="تکرار رمز عبور"
minlength="8"
>
</div>
</div>
</div>
</div>
{{-- =====================================
استان و شهرستان
====================================== --}}
<div class="form-section">
<div class="form-section-title">
<i class="fa fa-map-marker"></i>
محل سکونت
</div>
<div class="row">
{{-- استان --}}
<div class="col-md-6">
<div class="form-group">
<label for="province_id">
استان
</label>
<select
name="province_id"
id="province_id"
class="form-control"
>
<option value="">
انتخاب استان
</option>
@if(isset($provinces))
@foreach($provinces as $province)
<option
value="{{ $province->id }}"
{{ old('province_id') == $province->id ? 'selected' : '' }}
>
{{ $province->name }}
</option>
@endforeach
@endif
</select>
</div>
</div>
{{-- شهرستان --}}
<div class="col-md-6">
<div class="form-group">
<label for="city_id">
شهرستان
</label>
<select
name="city_id"
id="city_id"
class="form-control"
>
<option value="">
ابتدا استان را انتخاب کنید
</option>
</select>
</div>
</div>
</div>
</div>
{{-- =====================================
عکس
====================================== --}}
<div class="form-section">
<div class="form-section-title">
<i class="fa fa-image"></i>
تصویر پروفایل
</div>
<div class="form-group">
<label for="image">
عکس
</label>
<input
type="file"
id="image"
name="image"
class="form-control"
accept="image/jpeg,image/png,image/jpg"
>
<small class="form-help">
فرمت‌های مجاز:
JPG ، JPEG ، PNG
<br>
حداکثر حجم:
800 کیلوبایت
</small>
</div>
</div>
{{-- =====================================
دکمه ثبت
====================================== --}}
<div class="auth-submit">
<button
type="submit"
class="auth-btn"
>
<i class="fa fa-user-plus"></i>
ایجاد حساب کاربری
</button>
</div>
</form>
{{-- =====================================
ورود
====================================== --}}
<div class="auth-footer">
قبلاً حساب ساخته‌اید؟
<a href="{{ route('auth.login.index') }}">
وارد شوید
</a>
</div>
</div>
</div>
</div>
@endsection