Vulcan/packages/vulcan-lib/lib/client/auth.js

54 lines
1.3 KiB
JavaScript
Raw Normal View History

2018-05-18 08:26:25 +09:00
import Cookies from 'universal-cookie';
2017-02-06 14:33:34 +08:00
import { Meteor } from 'meteor/meteor';
2017-02-08 09:15:09 +08:00
import { getRenderContext } from './render_context.js';
2017-02-06 14:33:34 +08:00
2018-05-18 08:26:25 +09:00
const cookie = new Cookies();
2017-02-06 14:33:34 +08:00
function setToken(loginToken, expires) {
if (loginToken && expires !== -1) {
2018-05-18 08:26:25 +09:00
cookie.set('meteor_login_token', loginToken, {
2017-02-06 14:33:34 +08:00
path: '/',
expires,
});
} else {
cookie.remove('meteor_login_token', {
path: '/',
});
}
}
function resetToken() {
const context = getRenderContext();
2017-02-06 14:33:34 +08:00
const loginToken = global.localStorage['Meteor.loginToken'];
const loginTokenExpires = new Date(global.localStorage['Meteor.loginTokenExpires']);
if (loginToken) {
setToken(loginToken, loginTokenExpires);
} else {
setToken(null, -1);
}
context.loginToken = loginToken;
}
Meteor.startup(() => {
resetToken();
});
const originalSetItem = Meteor._localStorage.setItem;
Meteor._localStorage.setItem = function setItem(key, value) {
if (key === 'Meteor.loginToken') {
Meteor.defer(resetToken);
}
originalSetItem.call(Meteor._localStorage, key, value);
};
const originalRemoveItem = Meteor._localStorage.removeItem;
Meteor._localStorage.removeItem = function removeItem(key) {
if (key === 'Meteor.loginToken') {
Meteor.defer(resetToken);
}
originalRemoveItem.call(Meteor._localStorage, key);
2018-05-18 08:26:25 +09:00
};