forked from wasp-lang/wasp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrefresh_token.diff
102 lines (95 loc) · 4.83 KB
/
refresh_token.diff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
diff --git a/waspc/data/Generator/templates/server/src/auth/providers/config/google.ts b/waspc/data/Generator/templates/server/src/auth/providers/config/google.ts
index caf38a87..8973e63c 100644
--- a/waspc/data/Generator/templates/server/src/auth/providers/config/google.ts
+++ b/waspc/data/Generator/templates/server/src/auth/providers/config/google.ts
@@ -44,6 +44,8 @@ const _waspConfig: ProviderConfig = {
async function getGoogleProfile(accessToken: string): Promise<{
providerProfile: unknown;
providerUserId: string;
+ accessToken: string;
+ refreshToken: string;
}> {
const response = await fetch(
"https://openidconnect.googleapis.com/v1/userinfo",
@@ -61,7 +63,7 @@ const _waspConfig: ProviderConfig = {
throw new Error("Invalid profile");
}
- return { providerProfile, providerUserId: providerProfile.sub };
+ return { providerProfile, providerUserId: providerProfile.sub, accessToken, refreshToken };
}
return createOAuthProviderRouter({
@@ -70,8 +72,8 @@ const _waspConfig: ProviderConfig = {
userSignupFields: _waspUserSignupFields,
getAuthorizationUrl: ({ state, codeVerifier }) => google.createAuthorizationURL(state, codeVerifier, config),
getProviderInfo: async ({ code, codeVerifier }) => {
- const { accessToken } = await google.validateAuthorizationCode(code, codeVerifier);
- return getGoogleProfile(accessToken);
+ const { accessToken, refreshToken } = await google.validateAuthorizationCode(code, codeVerifier);
+ return getGoogleProfile(accessToken, refreshToken);
},
});
},
diff --git a/waspc/data/Generator/templates/server/src/auth/providers/oauth/handler.ts b/waspc/data/Generator/templates/server/src/auth/providers/oauth/handler.ts
index 9fdc36c3..f8dff180 100644
--- a/waspc/data/Generator/templates/server/src/auth/providers/oauth/handler.ts
+++ b/waspc/data/Generator/templates/server/src/auth/providers/oauth/handler.ts
@@ -70,6 +70,7 @@ function createOAuthLoginHandler<ST extends StateType>(
return handleRejection(async (_req, res) => {
const oAuthState = generateAndStoreOAuthState(stateTypes, provider, res);
const url = await getAuthorizationUrl(oAuthState);
+ url.searchParams.set("access_type", "offline");
return redirect(res, url.toString());
})
}
@@ -81,6 +82,8 @@ function createOAuthCallbackHandler<ST extends StateType>(
getProviderInfo: (oAuthState: ReturnType<typeof validateAndGetOAuthState<ST>>) => Promise<{
providerUserId: string,
providerProfile: unknown,
+ accessToken: string,
+ refreshToken: string,
}>,
) {
return handleRejection(async (req, res) => {
@@ -93,6 +96,8 @@ function createOAuthCallbackHandler<ST extends StateType>(
providerProfile,
providerUserId,
userSignupFields,
+ accessToken,
+ referhToken,
);
// Redirect to the client with the one time code
return redirect(res, redirectUri.toString());
diff --git a/waspc/data/Generator/templates/server/src/auth/providers/oauth/user.ts b/waspc/data/Generator/templates/server/src/auth/providers/oauth/user.ts
index d9c1d92a..88da959c 100644
--- a/waspc/data/Generator/templates/server/src/auth/providers/oauth/user.ts
+++ b/waspc/data/Generator/templates/server/src/auth/providers/oauth/user.ts
@@ -18,10 +18,12 @@ export async function finishOAuthFlowAndGetRedirectUri(
providerProfile: unknown,
providerUserId: string,
userSignupFields: UserSignupFields | undefined,
+ accessToken: string,
+ refreshToken: string,
): Promise<URL> {
const providerId = createProviderId(provider.id, providerUserId);
- const authId = await getAuthIdFromProviderDetails(providerId, providerProfile, userSignupFields);
+ const authId = await getAuthIdFromProviderDetails(providerId, providerProfile, userSignupFields, accessToken, refreshToken);
const oneTimeCode = await tokenStore.createToken(authId);
@@ -48,6 +50,8 @@ async function getAuthIdFromProviderDetails(
providerId: ProviderId,
providerProfile: any,
userSignupFields: UserSignupFields | undefined,
+ accessToken: string,
+ refreshToken: string,
): Promise<{= authEntityUpper =}['id']> {
const existingAuthIdentity = await prisma.{= authIdentityEntityLower =}.findUnique({
where: {
@@ -71,7 +75,10 @@ async function getAuthIdFromProviderDetails(
);
// For now, we don't have any extra data for the oauth providers, so we just pass an empty object.
- const providerData = await sanitizeAndSerializeProviderData({})
+ const providerData = await sanitizeAndSerializeProviderData({
+ accessToken,
+ refreshToken,
+ })
const user = await createUser(
providerId,