mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-02-27 17:11:14 +01:00
fix: register returnTo logic to match login route
Login route saves the previous page by checking for the X-Return-To header. This header is automatically set by ajaxify. Login takes this value and saves it to `req.session`. Up until now, `/register` saved the previous URL in a hidden input, and redirected based on that value, but it occasionally conflicted with req.session.returnTo. It was also confusing because it did not match how login handled the values. This commit updates the route handling so it works identically to `/login`.
This commit is contained in:
@@ -17,7 +17,6 @@ define('forum/register', [
|
|||||||
|
|
||||||
handleLanguageOverride();
|
handleLanguageOverride();
|
||||||
|
|
||||||
$('#referrer').val(app.previousUrl);
|
|
||||||
$('#content #noscript').val('false');
|
$('#content #noscript').val('false');
|
||||||
|
|
||||||
email.on('blur', function () {
|
email.on('blur', function () {
|
||||||
@@ -89,10 +88,10 @@ define('forum/register', [
|
|||||||
if (!data) {
|
if (!data) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (data.referrer) {
|
if (data.next) {
|
||||||
var pathname = utils.urlToLocation(data.referrer).pathname;
|
var pathname = utils.urlToLocation(data.next).pathname;
|
||||||
|
|
||||||
var params = utils.params({ url: data.referrer });
|
var params = utils.params({ url: data.next });
|
||||||
params.registered = true;
|
params.registered = true;
|
||||||
var qs = decodeURIComponent($.param(params));
|
var qs = decodeURIComponent($.param(params));
|
||||||
|
|
||||||
|
|||||||
@@ -34,14 +34,11 @@ async function registerAndLoginUser(req, res, userData) {
|
|||||||
userData.register = true;
|
userData.register = true;
|
||||||
req.session.registration = userData;
|
req.session.registration = userData;
|
||||||
|
|
||||||
if (req.body.referrer) {
|
|
||||||
req.session.returnTo = req.body.referrer;
|
|
||||||
}
|
|
||||||
if (req.body.noscript === 'true') {
|
if (req.body.noscript === 'true') {
|
||||||
res.redirect(nconf.get('relative_path') + '/register/complete');
|
res.redirect(nconf.get('relative_path') + '/register/complete');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
res.json({ referrer: nconf.get('relative_path') + '/register/complete' });
|
res.json({ next: nconf.get('relative_path') + '/register/complete' });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const queue = await user.shouldQueueUser(req.ip);
|
const queue = await user.shouldQueueUser(req.ip);
|
||||||
@@ -60,9 +57,9 @@ async function registerAndLoginUser(req, res, userData) {
|
|||||||
await user.joinGroupsFromInvitation(uid, userData.email);
|
await user.joinGroupsFromInvitation(uid, userData.email);
|
||||||
}
|
}
|
||||||
await user.deleteInvitationKey(userData.email);
|
await user.deleteInvitationKey(userData.email);
|
||||||
const referrer = req.body.referrer || req.session.returnTo || nconf.get('relative_path') + '/';
|
const next = req.session.returnTo || nconf.get('relative_path') + '/';
|
||||||
const complete = await plugins.hooks.fire('filter:register.complete', { uid: uid, referrer: referrer });
|
const complete = await plugins.hooks.fire('filter:register.complete', { uid: uid, next: next });
|
||||||
req.session.returnTo = complete.referrer;
|
req.session.returnTo = complete.next;
|
||||||
return complete;
|
return complete;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -144,6 +144,7 @@ Controllers.register = async function (req, res, next) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let errorText;
|
let errorText;
|
||||||
|
const returnTo = (req.headers['x-return-to'] || '').replace(nconf.get('base_url') + nconf.get('relative_path'), '');
|
||||||
if (req.query.error === 'csrf-invalid') {
|
if (req.query.error === 'csrf-invalid') {
|
||||||
errorText = '[[error:csrf-invalid]]';
|
errorText = '[[error:csrf-invalid]]';
|
||||||
}
|
}
|
||||||
@@ -158,6 +159,10 @@ Controllers.register = async function (req, res, next) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (returnTo) {
|
||||||
|
req.session.returnTo = returnTo;
|
||||||
|
}
|
||||||
|
|
||||||
const loginStrategies = require('../routes/authentication').getLoginStrategies();
|
const loginStrategies = require('../routes/authentication').getLoginStrategies();
|
||||||
res.render('register', {
|
res.render('register', {
|
||||||
'register_window:spansize': loginStrategies.length ? 'col-md-6' : 'col-md-12',
|
'register_window:spansize': loginStrategies.length ? 'col-md-6' : 'col-md-12',
|
||||||
|
|||||||
Reference in New Issue
Block a user