mirror of
https://github.com/muerwre/orchidmap-front.git
synced 2025-04-25 02:56:41 +07:00
auth: login through vk iframe
This commit is contained in:
parent
28dc2bec8b
commit
75505656df
6 changed files with 39 additions and 7 deletions
|
@ -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;
|
||||
|
|
18
backend/routes/auth/iframe/vk.js
Normal file
18
backend/routes/auth/iframe/vk.js
Normal 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
5
package-lock.json
generated
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue