Skip to content
This repository was archived by the owner on Apr 4, 2026. It is now read-only.

Commit fe66827

Browse files
committed
wip: refactoring auth with fortofy
1 parent e5f8e1e commit fe66827

6 files changed

Lines changed: 115 additions & 83 deletions

File tree

app/Http/Controllers/AuthController.php

Lines changed: 76 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@
77
use App\Http\Requests\Auth\RegisterRequest;
88
use App\Http\Requests\Auth\UpdateBasicProfileSettingsRequest;
99
use App\Http\Requests\Auth\UpdateProfileRequest;
10-
use App\Http\Resources\MyTokensResource;
1110
use App\Models\User;
1211
use App\Models\UserSocial;
13-
use App\TechDiary\Authentication;
1412
use Illuminate\Auth\AuthenticationException;
13+
use Illuminate\Support\Facades\URL;
1514
use Illuminate\Support\Str;
1615
use Laravel\Socialite\Facades\Socialite;
1716
use Laravel\Socialite\Two\InvalidStateException;
@@ -24,87 +23,97 @@ class AuthController extends Controller
2423
* @param RegisterRequest $request
2524
* @return \Illuminate\Http\JsonResponse
2625
*/
27-
public function register(RegisterRequest $request)
28-
{
29-
$user = User::create($request->all(['name', 'username', 'email', 'password']));
30-
31-
return response()->json([
32-
'message' => 'Registered successfully',
33-
'user' => $user
34-
]);
35-
}
26+
// public function register(RegisterRequest $request)
27+
// {
28+
// $user = User::create($request->all(['name', 'username', 'email', 'password']));
29+
//
30+
// return response()->json([
31+
// 'message' => 'Registered successfully',
32+
// 'user' => $user
33+
// ]);
34+
// }
35+
//
3636

3737
/**
3838
* Login using email and password
3939
* @param LoginRequest $request
4040
* @return array
4141
* @throws AuthenticationException
4242
*/
43-
public function login(LoginRequest $request)
44-
{
45-
if (!auth()->guard()->attempt($request->all()))
46-
throw new AuthenticationException('Invalid credential');
47-
48-
return [
49-
'token' => Authentication::createToken(auth()->user())
50-
];
51-
}
43+
// public function getTokenUsingCredential(LoginRequest $request)
44+
// {
45+
// if (!auth()->guard()->attempt($request->all()))
46+
// throw new AuthenticationException('Invalid credential');
47+
//
48+
// return [
49+
// 'token' => Authentication::createToken(auth()->user())
50+
// ];
51+
// }
5252

5353
/**
5454
* Authenticated user's tokens
5555
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
5656
*/
57-
public function myTokens()
58-
{
59-
return MyTokensResource::collection(auth()->user()->tokens);
60-
}
57+
// public function myTokens()
58+
// {
59+
// return MyTokensResource::collection(auth()->user()->tokens);
60+
// }
61+
62+
// public function revokeToken($id)
63+
// {
64+
// auth()->user()->tokens()->find($id)->delete();
65+
//
66+
// return response()->json([
67+
// 'message' => 'Token revoked successfully'
68+
// ]);
69+
// }
70+
71+
// public function logout()
72+
// {
73+
// auth()->user()->currentAccessToken()->delete();
74+
//
75+
// return response()->json([
76+
// 'message' => 'Successfully logged out'
77+
// ]);
78+
// }
6179

62-
public function revokeToken($id)
80+
/**
81+
*
82+
* @param $service
83+
* @return mixed
84+
*/
85+
public function oauthRedirect($service)
6386
{
64-
auth()->user()->tokens()->find($id)->delete();
65-
66-
return response()->json([
67-
'message' => 'Token revoked successfully'
68-
]);
87+
return Socialite::driver($service)->stateless()->redirect();
6988
}
7089

71-
public function logout()
90+
public function oauthCallback($service)
7291
{
73-
auth()->user()->currentAccessToken()->delete();
7492

75-
return response()->json([
76-
'message' => 'Successfully logged out'
77-
]);
78-
}
79-
80-
public function redirect($service)
81-
{
82-
return Socialite::driver($service)->stateless()->redirect();
83-
}
8493

85-
public function callback($service)
86-
{
8794
try {
88-
$serviceUser = Socialite::driver($service)->stateless()->user();
89-
// Check if this service already exists
95+
96+
$socialServiceUser = Socialite::driver($service)->stateless()->user();
97+
9098
$social_user = UserSocial::where([
9199
['service', $service],
92-
['service_uid', $serviceUser->id]
100+
['service_uid', $socialServiceUser->id]
93101
])->first();
102+
94103
if ($social_user) $user = $social_user->user;
95-
else if (!$user = User::whereEmail($serviceUser->email)->first()) {
104+
else if (!$user = User::whereEmail($socialServiceUser->email)->first()) {
96105

97106
$user = new User([
98-
'username' => $serviceUser->nickname ?? strtolower(explode("@", $serviceUser->email)[0] . Str::random(4)),
99-
'name' => $serviceUser->name ?? Str::random(6),
100-
'email' => $serviceUser->email,
101-
'profilePhoto' => $serviceUser?->avatar,
102-
'bio' => collect($serviceUser->user)->has('bio') ? $serviceUser->user['bio'] : null,
107+
'username' => $socialServiceUser->nickname ?? strtolower(explode("@", $socialServiceUser->email)[0] . Str::random(4)),
108+
'name' => $socialServiceUser->name ?? Str::random(6),
109+
'email' => $socialServiceUser->email,
110+
'profilePhoto' => $socialServiceUser?->avatar,
111+
'bio' => collect($socialServiceUser->user)->has('bio') ? $socialServiceUser->user['bio'] : null,
103112
]);
104113

105114
if ($service == 'github') {
106115
$user->social_links = [
107-
'github' => 'https://github.com/' . $serviceUser->nickname
116+
'github' => 'https://github.com/' . $socialServiceUser->nickname
108117
];
109118
}
110119
$user->save();
@@ -114,18 +123,29 @@ public function callback($service)
114123
NewUserCreated::dispatch($user);
115124
$user->socialProviders()->create([
116125
'service' => $service,
117-
'service_uid' => $serviceUser->id
126+
'service_uid' => $socialServiceUser->id
118127
]);
119128
}
120129

121-
$redirect_url = env('CLIENT_URL') . '/social-callback?token=' . Authentication::createToken($user);
130+
$signedRoute = URL::temporarySignedRoute('oauth-signed-login', now()->addMinute(), [
131+
'user_id' => $user->id,
132+
]);
133+
$signedToken = explode('?', $signedRoute)[1];
134+
135+
$redirect_url = env('CLIENT_URL') . '/auth/oauth-callback?' . $signedToken;
122136
return redirect($redirect_url);
123137

124138
} catch (InvalidStateException $e) {
125139
return $this->redirect(env('CLIENT_URL') . '?error=1');
126140
}
127141
}
128142

143+
public function oauthSignedLogin(\Illuminate\Http\Request $request)
144+
{
145+
auth()->loginUsingId($request->get('user_id'));
146+
return response()->noContent();
147+
}
148+
129149
public function updateProfile(UpdateProfileRequest $request)
130150
{
131151
auth()->user()->update($request->all());
@@ -151,4 +171,4 @@ public function updateBasicProfileSettings(UpdateBasicProfileSettingsRequest $re
151171
]);
152172
}
153173

154-
}
174+
}

app/Models/User.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,10 @@ public function socialProviders()
112112
return $this->hasMany(UserSocial::class);
113113
}
114114

115-
public function setPasswordAttribute($value)
116-
{
117-
$this->attributes['password'] = bcrypt($value);
118-
}
115+
// public function setPasswordAttribute($value)
116+
// {
117+
// $this->attributes['password'] = bcrypt($value);
118+
// }
119119

120120
public function setUsernameAttribute($value)
121121
{

app/Providers/RouteServiceProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class RouteServiceProvider extends ServiceProvider
1717
*
1818
* @var string
1919
*/
20-
public const HOME = '/home';
20+
public const HOME = '/api/user';
2121

2222
/**
2323
* The controller namespace for the application.

bootstrap/cache/services.php

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,12 @@
4949
45 => 'Spatie\\Permission\\PermissionServiceProvider',
5050
46 => 'Jenssegers\\Agent\\AgentServiceProvider',
5151
47 => 'App\\Providers\\TelescopeServiceProvider',
52-
48 => 'App\\Providers\\AppServiceProvider',
53-
49 => 'App\\Providers\\AuthServiceProvider',
54-
50 => 'App\\Providers\\BroadcastServiceProvider',
55-
51 => 'App\\Providers\\EventServiceProvider',
56-
52 => 'App\\Providers\\RouteServiceProvider',
52+
48 => 'App\\Providers\\FortifyServiceProvider',
53+
49 => 'App\\Providers\\AppServiceProvider',
54+
50 => 'App\\Providers\\AuthServiceProvider',
55+
51 => 'App\\Providers\\BroadcastServiceProvider',
56+
52 => 'App\\Providers\\EventServiceProvider',
57+
53 => 'App\\Providers\\RouteServiceProvider',
5758
),
5859
'eager' =>
5960
array (
@@ -89,11 +90,12 @@
8990
29 => 'Spatie\\Permission\\PermissionServiceProvider',
9091
30 => 'Jenssegers\\Agent\\AgentServiceProvider',
9192
31 => 'App\\Providers\\TelescopeServiceProvider',
92-
32 => 'App\\Providers\\AppServiceProvider',
93-
33 => 'App\\Providers\\AuthServiceProvider',
94-
34 => 'App\\Providers\\BroadcastServiceProvider',
95-
35 => 'App\\Providers\\EventServiceProvider',
96-
36 => 'App\\Providers\\RouteServiceProvider',
93+
32 => 'App\\Providers\\FortifyServiceProvider',
94+
33 => 'App\\Providers\\AppServiceProvider',
95+
34 => 'App\\Providers\\AuthServiceProvider',
96+
35 => 'App\\Providers\\BroadcastServiceProvider',
97+
36 => 'App\\Providers\\EventServiceProvider',
98+
37 => 'App\\Providers\\RouteServiceProvider',
9799
),
98100
'deferred' =>
99101
array (

config/app.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@
167167
*/
168168
Jenssegers\Agent\AgentServiceProvider::class,
169169
App\Providers\TelescopeServiceProvider::class,
170-
// App\Providers\FortifyServiceProvider::class,
170+
App\Providers\FortifyServiceProvider::class,
171171

172172
/*
173173
* Application Service Providers...

routes/api.php

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php
22

33
use App\Http\Controllers\ArticleController;
4+
use App\Http\Controllers\AuthController;
45
use App\Http\Controllers\TagController;
56
use App\Http\Controllers\UserController;
67
use Illuminate\Support\Facades\Route;
@@ -55,17 +56,26 @@
5556
/**
5657
* Authentication
5758
*/
58-
//Route::group(['prefix' => 'auth'], function () {
59-
//// Route::post('update-profile', [AuthController::class, 'updateProfile'])->middleware('auth:sanctum');
60-
//// Route::post('update-profile-basic-settings', [AuthController::class, 'updateBasicProfileSettings'])->middleware('auth:sanctum');
61-
//// Route::post('register', [AuthController::class, 'register']);
62-
//// Route::post('login', [AuthController::class, 'login']);
63-
//// Route::get('login/{service}', [AuthController::class, 'redirect']);
64-
//// Route::get('login/{service}/callback', [AuthController::class, 'callback']);
65-
//// Route::post('logout', [AuthController::class, 'logout'])->middleware('auth:sanctum');
66-
//// Route::get('my-tokens', [AuthController::class, 'myTokens'])->middleware('auth:sanctum');
67-
//// Route::delete('revoke-token/{id}', [AuthController::class, 'revokeToken'])->middleware('auth:sanctum');
68-
//});
59+
Route::group(['prefix' => 'auth'], function () {
60+
61+
Route::post('oauth/signed-login', [AuthController::class, 'oauthSignedLogin'])
62+
->name('oauth-signed-login')
63+
->middleware('signed');
64+
65+
Route::get('oauth/{service}', [AuthController::class, 'oauthRedirect']);
66+
Route::get('oauth/{service}/callback', [AuthController::class, 'oauthCallback']);
67+
68+
69+
// Route::post('update-profile', [AuthController::class, 'updateProfile'])->middleware('auth:sanctum');
70+
// Route::post('update-profile-basic-settings', [AuthController::class, 'updateBasicProfileSettings'])->middleware('auth:sanctum');
71+
// Route::post('register', [AuthController::class, 'register']);
72+
// Route::post('login', [AuthController::class, 'login']);
73+
// Route::get('login/{service}', [AuthController::class, 'redirect']);
74+
// Route::get('login/{service}/callback', [AuthController::class, 'callback']);
75+
// Route::post('logout', [AuthController::class, 'logout'])->middleware('auth:sanctum');
76+
// Route::get('my-tokens', [AuthController::class, 'myTokens'])->middleware('auth:sanctum');
77+
// Route::delete('revoke-token/{id}', [AuthController::class, 'revokeToken'])->middleware('auth:sanctum');
78+
});
6979

7080

7181
Route::get('articles-dump', function () {

0 commit comments

Comments
 (0)