mirror of
https://github.com/muerwre/orchidmap-front.git
synced 2025-04-25 11:06:40 +07:00
backend: login and logout
This commit is contained in:
parent
8bba2ff1ba
commit
032821329b
12 changed files with 166 additions and 41 deletions
|
@ -3,16 +3,22 @@ const { generateGuest, generateRandomUrl } = require('./guest');
|
|||
|
||||
module.exports = async (req, res) => {
|
||||
const { id, token } = req.query;
|
||||
const user = await User.find({ id, token });
|
||||
console.log(req.query);
|
||||
console.log('SEARCHING', id, token);
|
||||
|
||||
const user = await User.findOne({ _id: id, token });
|
||||
const random_url = await generateRandomUrl();
|
||||
|
||||
if (user.length > 0) {
|
||||
return res.send({ success: true, ...user[0].toObject() });
|
||||
if (user) {
|
||||
console.log('FOUND');
|
||||
return res.send({ success: true, ...user.toObject(), id: user._id, random_url });
|
||||
}
|
||||
|
||||
const guest = await generateGuest();
|
||||
const created = await User.create(guest).then(result => result.toObject());
|
||||
|
||||
return res.send({
|
||||
success: false, error: 'user not found', error_code: 1231, ...guest, random_url
|
||||
success: false, error: 'user not found', error_code: 1231, ...created, id: created._id, random_url
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
@ -2,19 +2,19 @@ const { genRandomSequence } = require('../../utils/gen');
|
|||
const { User } = require('../../models/User');
|
||||
|
||||
const generateGuestToken = () => {
|
||||
const id = `guest:${genRandomSequence(16)}`;
|
||||
const _id = `guest:${genRandomSequence(16)}`;
|
||||
|
||||
return User.find({ id }).then(user => {
|
||||
return User.find({ _id }).then(user => {
|
||||
if (user.length) return generateGuestToken();
|
||||
|
||||
return id;
|
||||
return _id;
|
||||
});
|
||||
};
|
||||
|
||||
const generateUser = (id, role = 'guest') => {
|
||||
const generateUser = (_id, role = 'guest') => {
|
||||
const token = `seq:${genRandomSequence(32)}`;
|
||||
|
||||
return { id, token, role };
|
||||
return { _id, token, role };
|
||||
};
|
||||
|
||||
const saveUser = user => {
|
||||
|
@ -37,7 +37,7 @@ const generateGuest = async () => {
|
|||
.then(generateUser);
|
||||
const random_url = await generateRandomUrl();
|
||||
|
||||
return { ...user, random_url };
|
||||
return { ...user, random_url, first_name: '', last_name: '', photo: '' };
|
||||
};
|
||||
|
||||
module.exports = async (req, res) => {
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
const { User } = require('../../../models/User');
|
||||
const axios = require('axios');
|
||||
const { generateGuest, generateRandomUrl, generateUser } = require('../guest');
|
||||
//
|
||||
// const generateTokenUrl = (host, code) => (
|
||||
// `https://oauth.vk.com/access_token?client_id=5987644&redirect_uri=http://${host}/` +
|
||||
// `auth/social/vk&client_secret=Z71DsxoMF7PS9kayLuks&code=${code}`
|
||||
// );
|
||||
const { generateUser } = require('../guest');
|
||||
const { STRINGS } = require('../../../config/strings');
|
||||
const { SOCIAL } = require('../../../config/social');
|
||||
|
||||
const fetchUserData = async (req) => {
|
||||
const fetchUserData = async (req, res) => {
|
||||
const { query: { code } } = req;
|
||||
const host = req.get('host');
|
||||
|
||||
|
@ -15,13 +12,18 @@ const fetchUserData = async (req) => {
|
|||
'https://oauth.vk.com/access_token',
|
||||
{
|
||||
params: {
|
||||
client_id: 5987644,
|
||||
client_secret: 'Z71DsxoMF7PS9kayLuks',
|
||||
client_id: SOCIAL.VK.client_id,
|
||||
client_secret: SOCIAL.VK.client_secret,
|
||||
code,
|
||||
redirect_uri: `http://${host}/auth/social/vk`,
|
||||
}
|
||||
}
|
||||
).catch(() => ({ data: { } }));
|
||||
).catch(() => res.render('social/vk_error', {
|
||||
title: STRINGS.OAUTH.ERROR_TITLE,
|
||||
heading: STRINGS.OAUTH.ERROR_HEADING,
|
||||
reason: STRINGS.OAUTH.ERROR_TEXT,
|
||||
button: STRINGS.OAUTH.ERROR_CLOSE_BUTTON,
|
||||
}));
|
||||
|
||||
const { data } = await axios.get(
|
||||
'https://api.vk.com/method/users.get',
|
||||
|
@ -33,26 +35,41 @@ const fetchUserData = async (req) => {
|
|||
access_token,
|
||||
}
|
||||
}
|
||||
).catch(() => ({ data: { response: [] } }));
|
||||
).catch(() => res.render('social/vk_error', {
|
||||
title: STRINGS.OAUTH.ERROR_TITLE,
|
||||
heading: STRINGS.OAUTH.ERROR_HEADING,
|
||||
reason: STRINGS.OAUTH.ERROR_TEXT,
|
||||
button: STRINGS.OAUTH.ERROR_CLOSE_BUTTON,
|
||||
}));
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
module.exports = async (req, res) => {
|
||||
const { response } = await fetchUserData(req);
|
||||
const { response } = await fetchUserData(req, res);
|
||||
|
||||
const {
|
||||
first_name = '', last_name = '', photo = '', id = ''
|
||||
} = response[0];
|
||||
|
||||
const newUser = await generateUser(`vk:${id}`, 'vk');
|
||||
const name = `${first_name} ${last_name}`;
|
||||
const user = {
|
||||
...newUser, first_name, last_name, photo
|
||||
...newUser, first_name, last_name, photo, name,
|
||||
};
|
||||
|
||||
// todo: error handling
|
||||
// console.log('USE', user);
|
||||
const auth = await User.findOne({ _id: user._id });
|
||||
|
||||
res.send(user);
|
||||
if (auth) {
|
||||
await auth.set({
|
||||
first_name, last_name, name, photo
|
||||
}).save();
|
||||
|
||||
res.render('social/success', { title: STRINGS.OAUTH.SUCCESS_TITLE, ...user });
|
||||
} else {
|
||||
const created = await User.create(user, (err, result) => result.toObject());
|
||||
|
||||
res.render('social/success', { title: STRINGS.OAUTH.SUCCESS_TITLE, ...user, ...created });
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue