Skip to content

Commit 0a36e45

Browse files
Guarantee all users get a name (#800)
* Guarantee all users get a name and it is used when talking to the backend * Small code cleanup
1 parent 6b82b2c commit 0a36e45

File tree

4 files changed

+30
-5
lines changed

4 files changed

+30
-5
lines changed

website/package-lock.json

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

website/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
"sharp": "^0.31.3",
6363
"swr": "^2.0.0",
6464
"tailwindcss": "^3.2.4",
65+
"unique-username-generator": "^1.1.3",
6566
"use-debounce": "^9.0.2"
6667
},
6768
"devDependencies": {

website/src/lib/oasst_api_client.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ export class OasstApiClient {
113113
type: taskType,
114114
user: {
115115
id: userToken.sub,
116-
display_name: userToken.name || userToken.email,
116+
display_name: userToken.name,
117117
auth_method: "local",
118118
},
119119
});
@@ -146,7 +146,7 @@ export class OasstApiClient {
146146
type: updateType,
147147
user: {
148148
id: userToken.sub,
149-
display_name: userToken.name || userToken.email,
149+
display_name: userToken.name,
150150
auth_method: "local",
151151
},
152152
task_id: taskId,

website/src/pages/api/auth/[...nextauth].ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import CredentialsProvider from "next-auth/providers/credentials";
77
import DiscordProvider from "next-auth/providers/discord";
88
import EmailProvider from "next-auth/providers/email";
99
import prisma from "src/lib/prismadb";
10+
import { generateUsername } from "unique-username-generator";
1011

1112
const providers: Provider[] = [];
1213

@@ -97,10 +98,11 @@ export const authOptions: AuthOptions = {
9798
* This let's use forward the role to the session object.
9899
*/
99100
async jwt({ token }) {
100-
const { isNew, role } = await prisma.user.findUnique({
101+
const { isNew, name, role } = await prisma.user.findUnique({
101102
where: { id: token.sub },
102-
select: { role: true, isNew: true },
103+
select: { name: true, role: true, isNew: true },
103104
});
105+
token.name = name;
104106
token.role = role;
105107
token.isNew = isNew;
106108
return token;
@@ -110,7 +112,18 @@ export const authOptions: AuthOptions = {
110112
/**
111113
* Update the user's role after they have successfully signed in
112114
*/
113-
async signIn({ user, account }) {
115+
async signIn({ user, account, isNewUser }) {
116+
if (isNewUser && account.provider === "email") {
117+
await prisma.user.update({
118+
data: {
119+
name: generateUsername(),
120+
},
121+
where: {
122+
id: user.id,
123+
},
124+
});
125+
}
126+
114127
// Get the admin list for the user's auth type.
115128
const adminForAccountType = adminUserMap.get(account.provider);
116129

0 commit comments

Comments
 (0)