googleapis
lib를 사용하여 Google Oauth 플로업 설정을 사용하고 oauthClient.getToken(code, ..)
을 사용한 후 tog et a가 refresh_token
인 것처럼 보이지 않습니다. access_token
과 id_token
만 반환합니다.googleapis lib를 사용하여 refresh_token 가져 오기
다음은 코드에서 내 결과입니다 :
이{
access_token: "...",
expiry_date: 1475080667529,
id_token: "...",
token_type: "Bearer"
}
여기 내 코드입니다 :
function getOauth() {
var oauthClient = new google.auth.OAuth2(
config.googleOauth.id,
config.googleOauth.secret,
`${config.https ? 'https' : 'http'}://${config.baseUrl}/google`
);
return Bluebird.promisifyAll(oauthClient);
}
/**
* Initialize session based of the auth code, which
* gives us the accessToken and the payload.
*
* Returns a session with the user tokenized and
* the accessToken for use to restore on page refresh.
*/
router.get('/initial', function * (req, res) {
try {
let oauth = getOauth();
let code = req.query.authorizationCode;
let results = yield oauth.getTokenAsync(code);
let tokens = results[0];
let result = yield oauth.verifyIdTokenAsync(tokens.id_token, config.googleOauth.id);
let payload = result.getPayload();
let user = yield User.findOneByEmail(payload.email, req.communityConfig);
let data = { user };
if (user.role) {
let role = yield Role.findOne(user.role, req.communityConfig);
data.roles = [role];
}
let token = auth.createToken(data);
res.json(extend({}, req.query, { token, accessToken: tokens.id_token }));
} catch(error) {
console.log(error.message);
throw new StatusError(401, error);
}
});
/**
* Use the google provider's fetch method to restore the session
* data using the accessToken.
*
* Returns a token created from the user and role, along with
* all of the query props passed in.
*/
router.get('/restore', function * (req, res) {
try {
let oauth = getOauth();
oauth.setCredentials({
access_token: req.query.accessToken
});
let tokens = yield oauth.getAccessTokenAsync();
let result = yield oauth.verifyIdTokenAsync(tokens[0], config.googleOauth.id);
let payload = result.getPayload();
let user = yield User.findOneByEmail(payload.email, req.communityConfig);
let data = { user };
if (user.role) {
let role = yield Role.findOne(user.role, req.communityConfig);
data.roles = [role];
}
let token = auth.createToken(data);
res.json(extend({}, req.query, { token }));
} catch(error) {
console.log(error.message);
throw new StatusError(401, error);
}
});
그래서 모든 초기와 새로 고침, 작동하지만 access_token
이 만료 된 후에, 그것은 더 이상 인증합니다.
내가토큰, 너무 늦게> 1475005777
'offline'
-
access_type
를 지정해야하지만이 경우에도 내 경우에는 그 설정 방법 모르는 heared
1475070618.739을 사용하고 그가 줄 알았는데 백그라운드 동기화 같은 것들. 무엇보다도 만료되기까지 하루가 걸리기 때문에 테스트하기가 어렵습니다.