auth: login through vk iframe

This commit is contained in:
muerwre 2018-12-10 15:27:17 +07:00
parent 28dc2bec8b
commit 75505656df
6 changed files with 39 additions and 7 deletions

View file

@ -3,6 +3,7 @@ const guest = require('./auth/guest');
const list = require('./auth/list');
const check = require('./auth/check');
const vk = require('./auth/social/vk');
const iframe_vk = require('./auth/iframe/vk');
const router = express.Router();
@ -10,5 +11,6 @@ router.get('/', check);
router.get('/list', list);
router.get('/guest', guest);
router.get('/social/vk', vk);
router.get('/iframe/vk', iframe_vk);
module.exports = router;

View file

@ -0,0 +1,18 @@
const { User } = require('../../../models');
const { CONFIG } = require('../../../../config/backend');
const md5 = require('js-md5');
const { generateRandomUrl } = require('../guest');
module.exports = async (req, res) => {
const { query: { viewer_id, auth_key } } = req;
const checksum = md5(`${CONFIG.SOCIAL.VK_IFRAME.APP_ID}_${viewer_id}_${CONFIG.SOCIAL.VK_IFRAME.SECRET}`);
if (checksum !== auth_key) return res.send({ success: false, error: 'cant login or no such user' });
const user = await User.findOne({ _id: `vk:${viewer_id}` }).populate('routes');
const random_url = await generateRandomUrl();
return res.send({ success: true, user: { ...user.toObject(), id: user._id, random_url } });
};

5
package-lock.json generated
View file

@ -7772,6 +7772,11 @@
"integrity": "sha512-/812MXr9RBtMObviZ8gQBhHO8MOrGj8HlEE+4ccMTElNA/6I3u39u+bhny55Lk921yn44nSZFy9naNLElL5wgQ==",
"dev": true
},
"js-md5": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz",
"integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ=="
},
"js-stringify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",

View file

@ -61,6 +61,7 @@
"file-saver": "^2.0.0",
"history": "^4.7.2",
"http-errors": "~1.6.2",
"js-md5": "^0.7.3",
"leaflet": "^1.3.4",
"leaflet-editable": "^1.1.0",
"leaflet-geometryutil": "^0.9.0",

View file

@ -152,10 +152,16 @@ function* mapInitSaga() {
function* authCheckSaga() {
const { id, token } = yield select(getUser);
if (window.location.search) {
const { viewer_id, access_token, auth_key } = yield parseQuery(window.location.search);
if (viewer_id && access_token && auth_key) {
const user = yield call(checkIframeToken, { viewer_id, access_token, auth_key });
if (window.location.search || true) {
const { viewer_id, auth_key } = yield parseQuery(window.location.search);
// https://alpha-map.vault48.org:3000/auth/iframe/vk?viewer_id=360004&access_token=e558a05d5cb1fcb195316703a2d5e5ec9d19b2c608844c986ec56798f8ac642379bb37fbc58270435e077&auth_key=b0ff47f659d21b6b880a1eee60b6e794
// const viewer_id = '360004';
// const auth_key = 'b0ff47f659d21b6b880a1eee60b6e794';
// console.log('Already logged in?', viewer_id, auth_key, id !== `vk:${viewer_id}`);
if (viewer_id && auth_key && id !== `vk:${viewer_id}`) {
const user = yield call(checkIframeToken, { viewer_id, auth_key });
if (user) {
yield put(setUser(user));

View file

@ -33,6 +33,6 @@ export const postMap = ({
distance,
}).then(result => (result && result.data && result.data));
export const checkIframeToken = ({ viewer_id, access_token, auth_key }) => axios.get(API.IFRAME_LOGIN_VK, {
params: { viewer_id, access_token, auth_key }
}).then(result => (result && result.data));
export const checkIframeToken = ({ viewer_id, auth_key }) => axios.get(API.IFRAME_LOGIN_VK, {
params: { viewer_id, auth_key }
}).then(result => (result && result.data && result.data.success && result.data.user)).catch(() => (false));