edit auth

This commit is contained in:
2026-03-01 13:32:47 +08:00
parent 0d6d28e4ea
commit 7bed529850
8 changed files with 311 additions and 3 deletions

View File

@@ -2,12 +2,47 @@
namespace App\Http\Controllers;
use App\Models\User;
use App\Models\EmployeeCounter;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redis;
class AuthController extends Controller
{
private function generateEmployeeId()
{
return DB::transaction(function () {
$year = date('Y');
$counter = EmployeeCounter::lockForUpdate()
->where('year', $year)
->first();
if (!$counter) {
$counter = EmployeeCounter::create([
'year' => $year,
'last_number' => 0
]);
}
$counter->last_number += 1;
$counter->save();
$runningNumber = str_pad($counter->last_number, 3, '0', STR_PAD_LEFT);
return 'S' . $year . $runningNumber;
});
}
public function showRegister()
{
return view('auth.register');
}
public function showLogin()
{
if (Auth::check()) {
@@ -31,6 +66,20 @@ public function login(Request $request)
'password' => $request->password
];
$user = User::where($loginType, $request->login)->first();
if (!$user) {
return back()->withErrors([
'login' => 'Account not registered.'
]);
}
if (!$user->is_approved) {
return back()->withErrors([
'login' => 'Account not approved by admin.'
]);
}
if (Auth::attempt($credentials)) {
$request->session()->regenerate();
@@ -70,4 +119,25 @@ public function logout(Request $request)
return redirect('/login');
}
public function register(Request $request)
{
$request->validate([
'name' => 'required|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8|confirmed'
]);
User::create([
'name' => $request->name,
'employee_id' => $this->generateEmployeeId(),
'email' => $request->email,
'password' => Hash::make($request->password),
'is_approved' => false,
'token_version' => 1,
]);
return redirect('/login')
->with('message', 'Registration successful. Waiting for admin approval.');
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class EmployeeCounter extends Model
{
protected $fillable = ['year', 'last_number'];
}

View File

@@ -22,6 +22,8 @@ class User extends Authenticatable
'employee_id',
'email',
'password',
'is_approved',
'token_version',
];
/**