Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mySkill-x
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
angular
mySkill-x
Commits
5eb663fb
Commit
5eb663fb
authored
Apr 23, 2025
by
Nakarin Luankla
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
UPDATE แก้ http-request.interceptor.ts
parent
89253046
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
21 additions
and
14 deletions
+21
-14
login-page2.component.html
src/app/authentication/login-page/login-page2.component.html
+1
-1
auth.service.ts
src/app/shared/services/auth.service.ts
+8
-2
http-request.interceptor.ts
src/app/shared/services/http-request.interceptor.ts
+11
-10
token.service.ts
src/app/shared/services/token.service.ts
+1
-1
No files found.
src/app/authentication/login-page/login-page2.component.html
View file @
5eb663fb
...
...
@@ -78,7 +78,7 @@
role=
"alert"
>
กรุณาตรวจสอบชื่อสมาชิกและรหัสผ่าน
</div>
<button
type=
"submit"
(
click
)="
Submit
()"
<button
type=
"submit"
class=
"py-2 px-3 inline-flex justify-center items-center gap-2 rounded-sm border border-transparent font-semibold bg-primary text-white hover:bg-primary focus:outline-none focus:ring-0 focus:ring-primary focus:ring-offset-0 transition-all text-sm dark:focus:ring-offset-white/10"
>
เข้าสู่ระบบ
</button>
<!-- <div class="text-center">
<p class="mt-3 text-sm text-gray-600 dark:text-white/70">
...
...
src/app/shared/services/auth.service.ts
View file @
5eb663fb
...
...
@@ -3,6 +3,7 @@ import { Injectable } from '@angular/core';
import
{
AngularFireAuth
}
from
'@angular/fire/compat/auth'
;
import
{
Router
}
from
'@angular/router'
;
import
{
BehaviorSubject
,
catchError
,
filter
,
Observable
,
switchMap
,
tap
,
throwError
}
from
'rxjs'
;
import
{
TokenService
}
from
'./token.service'
;
@
Injectable
({
providedIn
:
'root'
,
...
...
@@ -11,13 +12,18 @@ export class AuthService {
authState
:
any
;
apiBaseUrl
=
"/auth"
;
constructor
(
private
router
:
Router
,
private
http
:
HttpClient
)
{
constructor
(
private
router
:
Router
,
private
http
:
HttpClient
,
private
tokenService
:
TokenService
)
{
}
refreshToken
(
token
:
string
)
{
return
this
.
http
.
post
<
any
>
(
this
.
apiBaseUrl
+
"/refresh-token"
,
{
"refreshToken"
:
token
});
}).
pipe
(
tap
(
response
=>
{
this
.
tokenService
.
saveToken
(
response
.
accessToken
);
this
.
tokenService
.
saveRefreshToken
(
response
.
refreshToken
);
})
);
}
get
isUserAnonymousLoggedIn
():
boolean
{
...
...
src/app/shared/services/http-request.interceptor.ts
View file @
5eb663fb
...
...
@@ -14,7 +14,7 @@ import { TokenService } from './token.service';
const
TOKEN_HEADER_KEY
=
'Authorization'
;
@
Injectable
()
export
class
HttpRequestInterceptor
{
private
isRefreshing
=
fals
e
;
private
isRefreshing
=
tru
e
;
private
refreshTokenSubject
:
BehaviorSubject
<
any
>
=
new
BehaviorSubject
<
any
>
(
null
);
constructor
(
private
tokenService
:
TokenService
,
private
authService
:
AuthService
)
{
}
...
...
@@ -36,29 +36,30 @@ export class HttpRequestInterceptor {
return
next
.
handle
(
authReq
).
pipe
(
catchError
(
error
=>
{
if
(
fullUrl
.
includes
(
"login"
))
{
return
next
.
handle
(
this
.
addTokenHeader
(
req
,
"Bearer "
,
fullUrl
))
}
else
if
(
error
instanceof
HttpErrorResponse
&&
(
error
.
status
===
401
||
error
.
status
===
403
)
&&
!
fullUrl
.
includes
(
"login"
))
{
return
this
.
handle403Error
(
authReq
,
next
,
fullUrl
);
}
else
if
(
error
instanceof
HttpErrorResponse
&&
error
.
status
===
401
&&
!
fullUrl
.
includes
(
"login"
))
{
if
(
fullUrl
.
includes
(
"/refresh-token"
)
&&
error
.
status
===
401
){
this
.
tokenService
.
signOut
();
}
else
{
this
.
isRefreshing
=
false
;
return
this
.
handle401Error
(
authReq
,
next
,
fullUrl
);
}
}
return
throwError
(
error
);
}));
}
}
private
handle40
3
Error
(
request
:
HttpRequest
<
any
>
,
next
:
HttpHandler
,
fullUrl
:
string
)
{
private
handle40
1
Error
(
request
:
HttpRequest
<
any
>
,
next
:
HttpHandler
,
fullUrl
:
string
)
{
if
(
!
this
.
isRefreshing
)
{
this
.
isRefreshing
=
true
;
this
.
refreshTokenSubject
.
next
(
null
);
const
token
=
this
.
tokenService
.
getRefreshToken
();
if
(
token
)
{
return
this
.
authService
.
refreshToken
(
token
.
replace
(
"Bearer "
,
""
)).
pipe
(
switchMap
((
token
:
any
)
=>
{
this
.
isRefreshing
=
false
;
this
.
tokenService
.
saveToken
(
token
.
accessToken
);
this
.
tokenService
.
saveRefreshToken
(
token
.
refreshToken
);
this
.
isRefreshing
=
true
;
console
.
log
(
"🚀 2222222222222222222222222222222222222"
,
this
.
isRefreshing
)
this
.
refreshTokenSubject
.
next
(
token
.
accessToken
);
return
next
.
handle
(
this
.
addTokenHeader
(
request
,
"Bearer "
+
token
.
accessToken
,
fullUrl
));
}),
catchError
((
err
)
=>
{
...
...
src/app/shared/services/token.service.ts
View file @
5eb663fb
...
...
@@ -51,7 +51,7 @@ export class TokenService {
window
.
localStorage
.
clear
();
localStorage
.
clear
();
sessionStorage
.
clear
()
this
.
router
.
navigate
([
"/auth/splash"
]);
this
.
router
.
navigate
([
'/auth/login'
]);
}
public
saveToken
(
token
:
string
):
void
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment