diff --git a/modules/users/client/controllers/settings/manage-social-accounts.client.controller.js b/modules/users/client/controllers/settings/manage-social-accounts.client.controller.js
index 1551fce1..0e1c954e 100644
--- a/modules/users/client/controllers/settings/manage-social-accounts.client.controller.js
+++ b/modules/users/client/controllers/settings/manage-social-accounts.client.controller.js
@@ -5,15 +5,16 @@
.module('users')
.controller('SocialAccountsController', SocialAccountsController);
- SocialAccountsController.$inject = ['$scope', 'UsersService', 'Authentication', 'Notification'];
+ SocialAccountsController.$inject = ['$state', '$window', 'UsersService', 'Authentication', 'Notification'];
- function SocialAccountsController($scope, UsersService, Authentication, Notification) {
+ function SocialAccountsController($state, $window, UsersService, Authentication, Notification) {
var vm = this;
vm.user = Authentication.user;
vm.hasConnectedAdditionalSocialAccounts = hasConnectedAdditionalSocialAccounts;
vm.isConnectedSocialAccount = isConnectedSocialAccount;
vm.removeUserSocialAccount = removeUserSocialAccount;
+ vm.callOauthProvider = callOauthProvider;
// Check if there are additional accounts
function hasConnectedAdditionalSocialAccounts() {
@@ -42,5 +43,13 @@
function onRemoveSocialAccountError(response) {
Notification.error({ message: response.message, title: ' Remove failed!' });
}
+
+ // OAuth provider request
+ function callOauthProvider(url) {
+ url += '?redirect_to=' + encodeURIComponent($state.$current.url.prefix);
+
+ // Effectively call OAuth authentication route:
+ $window.location.href = url;
+ }
}
}());
diff --git a/modules/users/client/views/settings/manage-social-accounts.client.view.html b/modules/users/client/views/settings/manage-social-accounts.client.view.html
index 0fe8b324..1e52f715 100644
--- a/modules/users/client/views/settings/manage-social-accounts.client.view.html
+++ b/modules/users/client/views/settings/manage-social-accounts.client.view.html
@@ -18,7 +18,7 @@
Unconnected social accounts:
-
+
diff --git a/modules/users/server/controllers/users/users.authentication.server.controller.js b/modules/users/server/controllers/users/users.authentication.server.controller.js
index 7d96002b..75373b47 100644
--- a/modules/users/server/controllers/users/users.authentication.server.controller.js
+++ b/modules/users/server/controllers/users/users.authentication.server.controller.js
@@ -85,6 +85,9 @@ exports.signout = function (req, res) {
*/
exports.oauthCall = function (strategy, scope) {
return function (req, res, next) {
+ if (req.query && req.query.redirect_to)
+ req.session.redirect_to = req.query.redirect_to;
+
// Authenticate
passport.authenticate(strategy, scope)(req, res, next);
};
@@ -119,6 +122,14 @@ exports.oauthCallback = function (strategy) {
* Helper function to save or update a OAuth user profile
*/
exports.saveOAuthUserProfile = function (req, providerUserProfile, done) {
+ // Setup info object
+ var info = {};
+
+ // Set redirection path on session.
+ // Do not redirect to a signin or signup page
+ if (noReturnUrls.indexOf(req.session.redirect_to) === -1)
+ info.redirect_to = req.session.redirect_to;
+
if (!req.user) {
// Define a search query fields
var searchMainProviderIdentifierField = 'providerData.' + providerUserProfile.providerIdentifierField;
@@ -138,15 +149,6 @@ exports.saveOAuthUserProfile = function (req, providerUserProfile, done) {
$or: [mainProviderSearchQuery, additionalProviderSearchQuery]
};
- // Setup info object
- var info = {};
-
- // Set redirection path on session.
- // Do not redirect to a signin or signup page
- if (noReturnUrls.indexOf(req.query.redirect_to) === -1) {
- info.redirect_to = req.query.redirect_to;
- }
-
User.findOne(searchQuery, function (err, user) {
if (err) {
return done(err);
@@ -198,7 +200,7 @@ exports.saveOAuthUserProfile = function (req, providerUserProfile, done) {
// And save the user
user.save(function (err) {
- return done(err, user, '/settings/accounts');
+ return done(err, user, info);
});
} else {
return done(new Error('User is already connected using this provider'), user);