edit auth
This commit is contained in:
@@ -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.');
|
||||
}
|
||||
}
|
||||
|
||||
10
app/Models/EmployeeCounter.php
Normal file
10
app/Models/EmployeeCounter.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class EmployeeCounter extends Model
|
||||
{
|
||||
protected $fillable = ['year', 'last_number'];
|
||||
}
|
||||
@@ -22,6 +22,8 @@ class User extends Authenticatable
|
||||
'employee_id',
|
||||
'email',
|
||||
'password',
|
||||
'is_approved',
|
||||
'token_version',
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user