@@ -10,6 +10,11 @@ import { BasicStrategy } from 'passport-http';
1010
1111import User from '../models/user' ;
1212
13+ function generateUniqueUsername ( username ) {
14+ const adj = friendlyWords . predicates [ Math . floor ( Math . random ( ) * friendlyWords . predicates . length ) ] ;
15+ return slugify ( `${ username } ${ adj } ` ) ;
16+ }
17+
1318passport . serializeUser ( ( user , done ) => {
1419 done ( null , user . id ) ;
1520} ) ;
@@ -108,14 +113,20 @@ passport.use(new GitHubStrategy({
108113 existingEmailUser . verified = User . EmailConfirmation . Verified ;
109114 existingEmailUser . save ( saveErr => done ( null , existingEmailUser ) ) ;
110115 } else {
111- const user = new User ( ) ;
112- user . email = primaryEmail ;
113- user . github = profile . id ;
114- user . username = profile . username ;
115- user . tokens . push ( { kind : 'github' , accessToken } ) ;
116- user . name = profile . displayName ;
117- user . verified = User . EmailConfirmation . Verified ;
118- user . save ( saveErr => done ( null , user ) ) ;
116+ let { username } = profile ;
117+ User . findByUsername ( username , true , ( findByUsernameErr , existingUsernameUser ) => {
118+ if ( existingUsernameUser ) {
119+ username = generateUniqueUsername ( username ) ;
120+ }
121+ const user = new User ( ) ;
122+ user . email = primaryEmail ;
123+ user . github = profile . id ;
124+ user . username = profile . username ;
125+ user . tokens . push ( { kind : 'github' , accessToken } ) ;
126+ user . name = profile . displayName ;
127+ user . verified = User . EmailConfirmation . Verified ;
128+ user . save ( saveErr => done ( null , user ) ) ;
129+ } ) ;
119130 }
120131 } ) ;
121132 } ) ;
@@ -141,10 +152,9 @@ passport.use(new GoogleStrategy({
141152
142153 User . findByEmail ( primaryEmail , ( findByEmailErr , existingEmailUser ) => {
143154 let username = profile . _json . emails [ 0 ] . value . split ( '@' ) [ 0 ] ;
144- User . findByUsername ( username , ( findByUsernameErr , existingUsernameUser ) => {
155+ User . findByUsername ( username , true , ( findByUsernameErr , existingUsernameUser ) => {
145156 if ( existingUsernameUser ) {
146- const adj = friendlyWords . predicates [ Math . floor ( Math . random ( ) * friendlyWords . predicates . length ) ] ;
147- username = slugify ( `${ username } ${ adj } ` ) ;
157+ username = generateUniqueUsername ( username ) ;
148158 }
149159 // what if a username is already taken from the display name too?
150160 // then, append a random friendly word?
0 commit comments