1+ <?php
2+
3+ namespace App \Http \Controllers ;
4+
5+ use App \Models \User ;
6+ use App \Services \JwtService ;
7+ use Illuminate \Http \Request ;
8+ use Illuminate \Support \Facades \Hash ;
9+ use Illuminate \Validation \ValidationException ;
10+
11+ class AuthController extends Controller
12+ {
13+ public function register (Request $ request , JwtService $ jwt )
14+ {
15+ $ data = $ request ->validate ([
16+ 'name ' => ['required ' ,'string ' ,'max:120 ' ],
17+ 'email ' => ['required ' ,'email ' ,'max:190 ' ,'unique:users,email ' ],
18+ 'password ' => ['required ' ,'string ' ,'min:8 ' ,'confirmed ' ],
19+ ]);
20+
21+ $ user = User::query ()->create ([
22+ 'name ' => $ data ['name ' ],
23+ 'email ' => $ data ['email ' ],
24+ 'password ' => Hash::make ($ data ['password ' ]),
25+ ]);
26+
27+ $ token = $ jwt ->issueToken ($ user );
28+
29+ return response ()->json ([
30+ 'token ' => $ token ,
31+ 'token_type ' => 'Bearer ' ,
32+ 'expires_in ' => (int ) config ('jwt.ttl ' ),
33+ 'user ' => [
34+ 'id ' => $ user ->id ,
35+ 'name ' => $ user ->name ,
36+ 'email ' => $ user ->email ,
37+ ],
38+ ], 201 );
39+ }
40+
41+ public function login (Request $ request , JwtService $ jwt )
42+ {
43+ $ data = $ request ->validate ([
44+ 'email ' => ['required ' ,'email ' ],
45+ 'password ' => ['required ' ,'string ' ],
46+ ]);
47+
48+ $ user = User::query ()->where ('email ' , $ data ['email ' ])->first ();
49+
50+ if (!$ user || !Hash::check ($ data ['password ' ], $ user ->password )) {
51+ throw ValidationException::withMessages ([
52+ 'email ' => ['Invalid credentials. ' ],
53+ ]);
54+ }
55+
56+ $ token = $ jwt ->issueToken ($ user );
57+
58+ return response ()->json ([
59+ 'token ' => $ token ,
60+ 'token_type ' => 'Bearer ' ,
61+ 'expires_in ' => (int ) config ('jwt.ttl ' ),
62+ 'user ' => [
63+ 'id ' => $ user ->id ,
64+ 'name ' => $ user ->name ,
65+ 'email ' => $ user ->email ,
66+ ],
67+ ]);
68+ }
69+
70+ public function me (Request $ request )
71+ {
72+ $ user = $ request ->user ();
73+
74+ return response ()->json ([
75+ 'user ' => [
76+ 'id ' => $ user ?->id,
77+ 'name ' => $ user ?->name,
78+ 'email ' => $ user ?->email,
79+ ],
80+ ]);
81+ }
82+ }
0 commit comments