diff options
author | ryo <ryo@nopwd.lol> | 2025-03-11 16:15:29 +0000 |
---|---|---|
committer | ryo <ryo@nopwd.lol> | 2025-03-11 16:15:29 +0000 |
commit | fa4823dd632cad6a5736c1d900a064647bb72c20 (patch) | |
tree | a716b9d9f0ce62a9d2ca53f11d64b2a39b178d6c /app | |
parent | e1a48c8208c181fd40ecb065878ba9ea49b1f48f (diff) |
Fixed: player login based on user and password
Added: show errors to the user
Diffstat (limited to 'app')
-rw-r--r-- | app/Http/Controllers/PlayerController.php | 77 | ||||
-rw-r--r-- | app/Models/Player.php | 18 |
2 files changed, 84 insertions, 11 deletions
diff --git a/app/Http/Controllers/PlayerController.php b/app/Http/Controllers/PlayerController.php index d39b177..d80c04e 100644 --- a/app/Http/Controllers/PlayerController.php +++ b/app/Http/Controllers/PlayerController.php @@ -4,38 +4,97 @@ namespace App\Http\Controllers; use App\Models\Player; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Hash; use Symfony\Component\HttpFoundation\RedirectResponse; class PlayerController extends Controller { public function register(Request $request): RedirectResponse { - Player::create([ + $request->validate([ + 'name' => ['required', 'string', 'min:3', 'max:20'], + 'password' => ['required', 'string', 'min:4'], + ]); + $player = Player::create([ 'name' => $request->name, - 'team' => $request->team, - 'score' => 12, + 'password' => Hash::make($request->password), + 'team' => 'none', + 'score' => 0, ]); - return redirect('/'); + Auth::login($player); + + return redirect('dashboard'); } - public function login(Request $request) + public function login(Request $request): RedirectResponse { - if (! Player::where('name', $request->name)->exists()) { - return redirect('/'); + $credentials = $request->validate([ + 'name' => 'required', + 'password' => 'required', + ]); + + if (Auth::attempt($credentials)) { + $player = Auth::user(); + if (isset($player->is_admin)) { + return redirect('/admin'); + } + + return redirect('/dashboard'); } + return back()->withErrors([ + 'name' => 'The provided credentials do not match our records.', + ]); + } + + public function profile() + { + $player = Auth::user(); + + return view('/dashboard', compact('player')); + } + + public function admin() + { + $admin = Auth::user(); + $players = Player::all(); + + return view('/admin', compact('admin'), compact('players')); + } + + public function admin_team(Request $request): RedirectResponse + { + $request->validate([ + 'name' => ['required'], + 'team' => ['required'], + ]); $player = Player::where('name', $request->name)->first(); + $player->team = $request->team; + $player->save(); - return view('dashboard', compact('player')); + return back(); } public function score(Request $request): RedirectResponse { - $player = Player::find($request->id); + $request->validate([ + 'score' => ['required', 'integer', 'gt:0'], + ]); + $player = Auth::user(); $player->score = $request->score; $player->save(); return back(); } + + public function logout(Request $request): RedirectResponse + { + Auth::logout(); + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return redirect('/'); + } } diff --git a/app/Models/Player.php b/app/Models/Player.php index 12b95c5..3c2440c 100644 --- a/app/Models/Player.php +++ b/app/Models/Player.php @@ -2,13 +2,27 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Model; +use Illuminate\Foundation\Auth\User as Authenticatable; -class Player extends Model +class Player extends Authenticatable { protected $fillable = [ 'name', + 'password', 'team', 'score', ]; + + protected $hidden = [ + 'password', + 'remember_token', + 'is_amdin', + ]; + + protected function casts(): array + { + return [ + 'password' => 'hashed', + ]; + } } |