-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.ts
50 lines (44 loc) · 1.38 KB
/
index.ts
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
import express from 'express';
import session from 'cookie-session';
import { default as passport } from 'passport';
import { sync as uid } from 'uid-safe';
import { deserializeUser, serializeUser } from './user-serialization';
import {
strategy as localStrategy,
authRoutes as localAuthRoutes,
} from './strategies/local';
import {
strategy as twitterStrategy,
authRoutes as twitterAuthRoutes,
} from './strategies/twitter';
/**
* Set up a Express server to use authentication via PassportJS
* `server` needs to be configured to use `bodyParser.urlencoded()`
* This function will add `server.use(session)` as well
*/
export function useAuth(server: express.Express): void {
// session management
const SECRET_UID_LENGTH = 18;
const COOKIE_MAX_AGE = 86400000; // 24 hours in ms
const sessionConfig: CookieSessionInterfaces.CookieSessionOptions = {
secret: uid(SECRET_UID_LENGTH),
maxAge: COOKIE_MAX_AGE,
};
// strategy setup
passport.use(localStrategy);
if (twitterStrategy) {
passport.use(twitterStrategy);
}
// user serialization
passport.serializeUser(serializeUser);
passport.deserializeUser(deserializeUser);
// configure Express
server.use(session(sessionConfig));
server.use(passport.initialize());
server.use(passport.session());
// auth routes
server.use(localAuthRoutes);
if (twitterAuthRoutes) {
server.use(twitterAuthRoutes);
}
}