2
2
3
3
namespace App \Http \Controllers ;
4
4
5
- use App \Helpers \Utils ;
6
5
use App \Models \User ;
7
6
use App \Models \UserProvider ;
8
7
use Illuminate \Auth \Events \PasswordReset ;
19
18
use Illuminate \Validation \ValidationException ;
20
19
use Illuminate \View \View ;
21
20
use Laravel \Socialite \Facades \Socialite ;
21
+ use App \Contracts \AuthServiceContract ;
22
22
23
23
class AuthController extends Controller
24
24
{
25
+ public function __construct (
26
+ private AuthServiceContract $ authService
27
+ ) {}
28
+
25
29
/**
26
30
* Register new user
27
31
*/
@@ -113,14 +117,28 @@ public function callback(Request $request, string $provider): View
113
117
$ user = $ userProvider ->user ;
114
118
}
115
119
116
- Auth::login ($ user , true );
117
- $ request ->session ()->regenerate ();
120
+ $ message = [
121
+ 'ok ' => true ,
122
+ 'provider ' => $ provider ,
123
+ ];
124
+
125
+ // If the guard is web, we will use the default login process
126
+ if (config ('auth.defaults.guard ' ) === 'web ' ) {
127
+ Auth::login ($ user , true );
128
+ $ request ->session ()->regenerate ();
129
+ } else {
130
+ // If the guard is api, we will use the token based authentication
131
+ $ token = $ user ->createDeviceToken (
132
+ device: $ request ->deviceName (),
133
+ ip: $ request ->ip (),
134
+ remember: $ request ->input ('remember ' , false )
135
+ );
136
+
137
+ $ message ['token ' ] = $ token ;
138
+ }
118
139
119
140
return view ('oauth ' , [
120
- 'message ' => [
121
- 'ok ' => true ,
122
- 'provider ' => $ provider ,
123
- ],
141
+ 'message ' => $ message ,
124
142
]);
125
143
}
126
144
@@ -135,25 +153,25 @@ public function login(Request $request): JsonResponse
135
153
'password ' => ['required ' , 'string ' ],
136
154
]);
137
155
138
- if (!Auth::attempt ($ request ->only ('email ' , 'password ' ), $ request ->remember )) {
156
+ $ user = User::select (['id ' , 'password ' ])->where ('email ' , $ request ->email )->first ();
157
+
158
+ if (!$ user ) {
139
159
throw ValidationException::withMessages ([
140
160
'email ' => __ ('auth.failed ' ),
141
161
]);
142
162
}
143
163
144
- $ request -> session ()-> regenerate ( );
164
+ $ result = $ this -> authService -> login ( $ request , $ user );
145
165
146
- return response ()->json ([
147
- 'ok ' => true ,
148
- ]);
166
+ return response ()->json ($ result );
149
167
}
150
168
151
169
/**
152
170
* Revoke token; only remove token that is used to perform logout (i.e. will not revoke all tokens)
153
171
*/
154
172
public function logout (Request $ request ): JsonResponse
155
173
{
156
- Auth:: logout ();
174
+ $ this -> authService -> logout ($ request );
157
175
158
176
return response ()->json ([
159
177
'ok ' => true ,
@@ -294,21 +312,7 @@ public function verificationNotification(Request $request): JsonResponse
294
312
*/
295
313
public function devices (Request $ request ): JsonResponse
296
314
{
297
- $ user = $ request ->user ();
298
-
299
- $ currentSessionId = $ request ->session ()->getId ();
300
-
301
- $ devices = $ user ->sessions ()
302
- ->select (['id as key ' , 'ip_address as ip ' , 'user_agent as name ' , 'last_activity ' ])
303
- ->orderBy ('last_activity ' , 'DESC ' )
304
- ->get ()
305
- ->map (function ($ device ) use ($ currentSessionId ) {
306
- $ device ->is_current = $ currentSessionId === $ device ->key ;
307
- $ device ->name = Utils::getDeviceNameFromDetector (Utils::getDeviceDetectorByUserAgent ($ device ->name ));
308
- $ device ->last_used_at = now ()->parse ($ device ->last_activity );
309
-
310
- return $ device ;
311
- });
315
+ $ devices = $ this ->authService ->getDevices ($ request );
312
316
313
317
return response ()->json ([
314
318
'ok ' => true ,
@@ -322,11 +326,10 @@ public function devices(Request $request): JsonResponse
322
326
public function deviceDisconnect (Request $ request ): JsonResponse
323
327
{
324
328
$ request ->validate ([
325
- 'key ' => 'required|size:40 ' ,
329
+ 'key ' => 'required|string ' ,
326
330
]);
327
331
328
- $ user = $ request ->user ();
329
- $ user ->sessions ()->where ('id ' , $ request ->key )->delete ();
332
+ $ this ->authService ->disconnectDevice ($ request );
330
333
331
334
return response ()->json ([
332
335
'ok ' => true ,
0 commit comments