Initial Commit
This commit is contained in:
53
server/auth.ts
Normal file
53
server/auth.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
import passport from 'passport';
|
||||
import { Strategy as GitHubStrategy } from 'passport-github2';
|
||||
import { db } from './database';
|
||||
|
||||
passport.serializeUser((user: any, done) => {
|
||||
done(null, user.id);
|
||||
});
|
||||
|
||||
passport.deserializeUser((id: number, done) => {
|
||||
try {
|
||||
const stmt = db.prepare('SELECT * FROM users WHERE id = ?');
|
||||
const user = stmt.get(id);
|
||||
done(null, user);
|
||||
} catch (error) {
|
||||
done(error, null);
|
||||
}
|
||||
});
|
||||
|
||||
passport.use(new GitHubStrategy({
|
||||
clientID: process.env.GITHUB_CLIENT_ID!,
|
||||
clientSecret: process.env.GITHUB_CLIENT_SECRET!,
|
||||
callbackURL: '/auth/github/callback'
|
||||
}, async (accessToken, refreshToken, profile, done) => {
|
||||
try {
|
||||
let user;
|
||||
const existingUser = db.prepare('SELECT * FROM users WHERE github_id = ?').get(profile.id);
|
||||
|
||||
if (existingUser) {
|
||||
user = existingUser;
|
||||
} else {
|
||||
const stmt = db.prepare(`
|
||||
INSERT INTO users (github_id, username, display_name, avatar_url, email)
|
||||
VALUES (?, ?, ?, ?, ?)
|
||||
`);
|
||||
|
||||
const result = stmt.run(
|
||||
profile.id,
|
||||
profile.username,
|
||||
profile.displayName || profile.username,
|
||||
profile._json.avatar_url,
|
||||
profile._json.email
|
||||
);
|
||||
|
||||
user = db.prepare('SELECT * FROM users WHERE id = ?').get(result.lastInsertRowid);
|
||||
}
|
||||
|
||||
return done(null, user);
|
||||
} catch (error) {
|
||||
return done(error, undefined);
|
||||
}
|
||||
}));
|
||||
|
||||
export { passport };
|
||||
Reference in New Issue
Block a user