Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c2f0686

Browse files
committed
fix(NA): fixed login and logout problems.
1 parent 3cbd011 commit c2f0686

File tree

3 files changed

+75
-41
lines changed

3 files changed

+75
-41
lines changed

api/config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ export default {
66
// and the extracted_queries.json file in both the client and API server
77
// must be the same.
88
persistedQueries: false,
9+
sessionStoreSecret: 'your secret',
910
};

api/githubLogin.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import session from 'express-session';
22
import passport from 'passport';
33
import { Strategy as GitHubStrategy } from 'passport-github';
44
import knex from './sql/connector';
5+
import config from './config';
56

67
import {
78
GITHUB_CLIENT_ID,
@@ -33,11 +34,11 @@ export function setUpGitHubLogin(app) {
3334
cb(null, profile);
3435
}));
3536

36-
passport.serializeUser((user, cb) => cb(null, user));
37-
passport.deserializeUser((obj, cb) => cb(null, obj));
37+
passport.serializeUser((user, cb) => {cb(null, user);});
38+
passport.deserializeUser((obj, cb) => {cb(null, obj);});
3839

3940
app.use(session({
40-
secret: 'your secret',
41+
secret: config.sessionStoreSecret,
4142
resave: true,
4243
saveUninitialized: true,
4344
store,
@@ -57,4 +58,6 @@ export function setUpGitHubLogin(app) {
5758
req.logout();
5859
res.redirect('/');
5960
});
61+
62+
return store;
6063
}

api/server.js

Lines changed: 68 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import path from 'path';
22
import express from 'express';
33
import cookie from 'cookie';
44
import cookieParser from 'cookie-parser';
5-
import url from 'url';
65
import cors from 'cors';
76
import { graphqlExpress, graphiqlExpress } from 'graphql-server-express';
87
import OpticsAgent from 'optics-agent';
@@ -27,7 +26,6 @@ import queryMap from '../extracted_queries.json';
2726
import config from './config';
2827

2928
const SUBSCRIPTIONS_PATH = '/subscriptions';
30-
let wsSessionUser = null;
3129

3230
// Arguments usually come from env vars
3331
export function run({
@@ -66,7 +64,7 @@ export function run({
6664
},
6765
);
6866

69-
var sessionStore = setUpGitHubLogin(app);
67+
const sessionStore = setUpGitHubLogin(app);
7068
app.use(cookieParser('your secret'));
7169

7270
if (OPTICS_API_KEY) {
@@ -154,54 +152,86 @@ export function run({
154152
schema,
155153
executor: graphqlExecutor,
156154

155+
/*
157156
onConnect: (msg, connectionContext) => {
158157
const socket = connectionContext.socket;
159158
160159
// We get req.user from passport-github with some pretty oddly named fields,
161160
// let's convert that to the fields in our schema, which match the GitHub
162161
// API field names.
163-
/**/
164162
if (socket.upgradeReq) {
165-
var location = url.parse(socket.upgradeReq.url, true);
166-
//get sessionID
167-
var cookies = cookie.parse(socket.upgradeReq.headers.cookie);
168-
var sessionID = cookieParser.signedCookie(cookies["connect.sid"], config.sessionStoreSecret);
169-
//get the session object
170-
sessionStore.get(sessionID, function (err, session) {
171-
const sessionUser = session.passport.user;
172-
wsSessionUser = {
173-
login: sessionUser.username,
174-
html_url: sessionUser.profileUrl,
175-
avatar_url: sessionUser.photos[0].value,
176-
};
177-
178-
});
179-
};
163+
// get sessionID
164+
165+
const cookies = cookie.parse(socket.upgradeReq.headers.cookie);
166+
const sessionID = cookieParser.signedCookie(cookies['connect.sid'],
167+
config.sessionStoreSecret);
168+
// get the session object
169+
sessionStore.get(sessionID, (err, session) => {
170+
if (session && session.passport && session.passport.user) {
171+
const sessionUser = session.passport.user;
172+
wsSessionUser = {
173+
login: sessionUser.username,
174+
html_url: sessionUser.profileUrl,
175+
avatar_url: sessionUser.photos[0].value,
176+
};
177+
}
178+
});
179+
}
180180
},
181+
*/
181182

182183
// the onSubscribe function is called for every new subscription
183184
// and we use it to set the GraphQL context for this subscription
184185
onRequest: (msg, params, socket) => {
185-
const gitHubConnector = new GitHubConnector({
186-
clientId: GITHUB_CLIENT_ID,
187-
clientSecret: GITHUB_CLIENT_SECRET,
188-
});
189-
190-
let opticsContext;
191-
if (OPTICS_API_KEY) {
192-
opticsContext = OpticsAgent.context(req);
193-
}
194-
195-
return Object.assign({}, params, {
196-
context: {
197-
user: wsSessionUser,
198-
Repositories: new Repositories({ connector: gitHubConnector }),
199-
Users: new Users({ connector: gitHubConnector }),
200-
Entries: new Entries(),
201-
Comments: new Comments(),
202-
opticsContext,
203-
},
186+
return new Promise((resolve) => {
187+
const gitHubConnector = new GitHubConnector({
188+
clientId: GITHUB_CLIENT_ID,
189+
clientSecret: GITHUB_CLIENT_SECRET,
190+
});
191+
192+
let opticsContext;
193+
if (OPTICS_API_KEY) {
194+
opticsContext = OpticsAgent.context(socket.upgradeReq);
195+
}
196+
197+
let wsSessionUser = null;
198+
if (socket.upgradeReq) {
199+
// get sessionID
200+
const cookies = cookie.parse(socket.upgradeReq.headers.cookie);
201+
const sessionID = cookieParser.signedCookie(cookies['connect.sid'], config.sessionStoreSecret);
202+
// get the session object
203+
sessionStore.get(sessionID, (err, session) => {
204+
if (session && session.passport && session.passport.user) {
205+
const sessionUser = session.passport.user;
206+
wsSessionUser = {
207+
login: sessionUser.username,
208+
html_url: sessionUser.profileUrl,
209+
avatar_url: sessionUser.photos[0].value,
210+
};
211+
resolve(Object.assign({}, params, {
212+
context: {
213+
user: wsSessionUser,
214+
Repositories: new Repositories({ connector: gitHubConnector }),
215+
Users: new Users({ connector: gitHubConnector }),
216+
Entries: new Entries(),
217+
Comments: new Comments(),
218+
opticsContext,
219+
},
220+
}));
221+
} else {
222+
resolve(resolve(Object.assign({}, params, {
223+
context: {
224+
Repositories: new Repositories({ connector: gitHubConnector }),
225+
Users: new Users({ connector: gitHubConnector }),
226+
Entries: new Entries(),
227+
Comments: new Comments(),
228+
opticsContext,
229+
},
230+
})));
231+
}
204232
});
233+
}
234+
});
205235
},
206236
},
207237
{

0 commit comments

Comments
 (0)