feat: add user authentication

This commit is contained in:
2026-08-20 08:10:51 +03:30
parent bbdfb48812
commit 793a3dc06e
6 changed files with 145 additions and 144 deletions
+18 -32
View File
@@ -3,57 +3,43 @@
namespace App\Http\Controllers\Auth; namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use App\Http\Requests\Auth\LoginPostRequest;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
class LoginController extends Controller class LoginController extends Controller
{ {
/**
* نمایش صفحه ورود
*/
public function index() public function index()
{ {
return view('auth.login'); return view('auth.login');
} }
/**
* ورود کاربر public function post(LoginPostRequest $request)
*/
public function post(Request $request)
{ {
// $credentials = $request->validate([ $login = $request->validated();
// 'email' => [
// 'required', $field = filter_var($login['username'], FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
// 'email',
// ], $credentials = [
// $field => $login['username'],
// 'password' => [ 'password' => $login['password'],
// 'required', ];
// 'string',
// ],
// ],
//
// [
// 'email.required' => 'ایمیل را وارد کنید.',
// 'email.email' => 'فرمت ایمیل صحیح نیست.',
// 'password.required' => 'رمز عبور را وارد کنید.',
// ]);
$remember = $request->boolean('remember'); $remember = $request->boolean('remember');
if (Auth::guard('web')->attempt($credentials, $remember)) { if (Auth::attempt($credentials, $remember)) {
$request->session()->regenerate(); $request->session()->regenerate();
return redirect()->intended( return redirect()
route('index') ->intended(route('account.index'))
); ->with('success', 'با موفقیت وارد حساب کاربری شدید.');
} }
return back() return back()
->withInput($request->only('email', 'remember')) ->withInput($request->only('username'))
->withErrors([ ->withErrors([
'email' => 'ایمیل یا رمز عبور اشتباه است.', 'username' => 'نام کاربری، ایمیل یا رمز عبور اشتباه است.',
]); ]);
} }
} }
+10 -1
View File
@@ -4,8 +4,17 @@ namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LogoutController extends Controller class LogoutController extends Controller
{ {
// public function index(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect()->route('auth.login.index')->with('success', 'با موفقیت از حساب کاربری خارج شدید.');
}
} }
@@ -1,5 +1,6 @@
<?php <?php
namespace App\Http\Controllers\Auth; namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
@@ -7,11 +8,8 @@ use App\Http\Requests\Auth\RegisterPostRequest;
use App\Models\City; use App\Models\City;
use App\Models\Province; use App\Models\Province;
use App\Models\User; use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage;
use Illuminate\Validation\Rule;
class RegisterController extends Controller class RegisterController extends Controller
{ {
@@ -26,9 +24,13 @@ class RegisterController extends Controller
} }
/**
* ثبت نام کاربر
*/
public function post(RegisterPostRequest $request) public function post(RegisterPostRequest $request)
{ {
// $data = $request->validated();
$imagePath = null; $imagePath = null;
@@ -42,65 +44,59 @@ class RegisterController extends Controller
$user = User::create([ $user = User::create([
'first_name' => $request->input('first_name'), 'first_name' => $request['first_name'],
'last_name' => $request->input('last_name'), 'last_name' => $request['last_name'],
'national_code' => $request->input('national_code'), 'national_code' => $request['national_code'],
'gender' => $request->input('gender'), 'gender' => $request['gender'],
'marital_status' => $request->input('marital_status'), 'marital_status' => $request['marital_status'],
'spouse_name' => $request->input('marital_status') == 2 'spouse_name' => $request['marital_status'] == 2
? $request->input('spouse_name') ? ($data['spouse_name'] ?? null)
: null, : null,
'mobile' => $request->input('mobile'), 'mobile' => $request['mobile'],
'email' => $request->input('email'), 'email' => $request['email'],
'username' => $request->input('username'), 'username' => $request['username'],
'password' => Hash::make($request->input('password')), 'password' => Hash::make($request['password']),
'image' => $imagePath, 'image' => $imagePath,
'province_id' => $request->input('province_id'), 'province_id' => $data['province_id'] ?? null,
'city_id' => $request->input('city_id'), 'city_id' => $request['city_id'] ?? null,
'status' => 1, 'status' => 1,
]); ]);
/*
|--------------------------------------------------------------------------
| ورود خودکار بعد از ثبت نام
|--------------------------------------------------------------------------
*/
Auth::guard('web')->login($user); Auth::guard('web')->login($user);
$request->session()->regenerate(); // $request->session()->regenerate();
/*
|--------------------------------------------------------------------------
| انتقال به پنل کاربری
|--------------------------------------------------------------------------
*/
return redirect() return redirect()
->route('account.index') ->route('account.index')
->with('success', 'ثبت‌نام شما با موفقیت انجام شد.'); ->with('success', 'ثبت‌نام شما با موفقیت انجام شد.');
} }
/**
* دریافت شهرستان‌های یک استان
*/
public function cities(Province $province) public function cities(Province $province)
{ {
$cities = City::where('province_id', $province->id) $cities = City::where('province_id', $province->id)
->orderBy('name') ->orderBy('name')
->get(['id', 'name']); ->get([
'id',
'name'
]);
return response()->json($cities); return response()->json($cities);
} }
+7 -2
View File
@@ -23,9 +23,14 @@ class LoginPostRequest extends FormRequest
public function rules(): array public function rules(): array
{ {
return [ return [
'email' => [ // 'email' => [
// 'required',
// 'email',
// ],
'username' => [
'required', 'required',
'email', 'string',
], ],
'password' => [ 'password' => [
+80 -75
View File
@@ -25,105 +25,110 @@ class RegisterPostRequest extends FormRequest
{ {
return [ return [
'first_name' => [ 'first_name' => [
'required', 'required',
'string', 'persian_alpha',
'max:100', 'string',
'regex:/^[\x{0600}-\x{06FF}\x{200C}\s]+$/u', 'min:3',
], 'max:100',
// 'regex:/^[\x{0600}-\x{06FF}\x{200C}\s]+$/u',
],
'last_name' => [ 'last_name' => [
'required', 'required',
'string', 'persian_alpha',
'max:100', 'string',
'regex:/^[\x{0600}-\x{06FF}\x{200C}\s]+$/u', 'max:100',
], // 'regex:/^[\x{0600}-\x{06FF}\x{200C}\s]+$/u',
],
'national_code' => [ 'national_code' => [
'required', 'required',
'digits:10', // 'ir_national_id',
'unique:users,national_code', 'digits:10',
], 'unique:users,national_code',
],
'gender' => [ 'gender' => [
'required', 'required',
'integer', 'integer',
Rule::in([1, 2]), Rule::in([1, 2]),
], ],
'marital_status' => [ 'marital_status' => [
'required', 'required',
'integer', 'integer',
Rule::in([1, 2, 3]), Rule::in([1, 2, 3]),
], ],
'spouse_name' => [ 'spouse_name' => [
'nullable', 'nullable',
'string', 'string',
'max:200', 'max:200',
'required_if:marital_status,2', 'required_if:marital_status,2',
'regex:/^[\x{0600}-\x{06FF}\x{200C}\s]+$/u', // 'regex:/^[\x{0600}-\x{06FF}\x{200C}\s]+$/u',
], ],
'mobile' => [ 'mobile' => [
'required', 'required',
'digits:11', 'digits:11',
'regex:/^09\d{9}$/', 'ir_mobile:zero',
'unique:users,mobile', // 'regex:/^09\d{9}$/',
], 'unique:users,mobile',
],
'email' => [ 'email' => [
'required', 'required',
'email', 'email',
'max:150', 'max:150',
'unique:users,email', 'unique:users,email',
], ],
'username' => [ 'username' => [
'required', 'required',
'string', 'persian_not_accept',
'min:3', 'string',
'max:50', 'min:3',
'regex:/^[A-Za-z0-9]+$/', 'max:50',
'unique:users,username', // 'regex:/^[A-Za-z0-9]+$/',
], 'unique:users,username',
],
'password' => [ 'password' => [
'required', 'required',
'string', 'string',
'min:8', 'min:8',
'confirmed', 'confirmed',
], ],
'image' => [ 'image' => [
'nullable', 'nullable',
'image', 'image',
'mimes:jpg,jpeg,png,webp', 'mimes:jpg,jpeg,png,webp',
'max:800', 'max:800',
], ],
'province_id' => [ 'province_id' => [
'nullable', 'nullable',
'integer', 'integer',
], ],
'city_id' => [ 'city_id' => [
'nullable', 'nullable',
'integer', 'integer',
], ],
]; ];
+2 -2
View File
@@ -98,8 +98,8 @@
<input <input
type="text" type="text"
id="login" id="username"
name="login" name="username"
value="{{ old('login') }}" value="{{ old('login') }}"
class="form-control" class="form-control"
placeholder="ایمیل یا نام کاربری" placeholder="ایمیل یا نام کاربری"