Last active
September 17, 2019 15:55
-
-
Save dcoffey3296/d27c141ef79bec3ff6a6 to your computer and use it in GitHub Desktop.
Authentication redirect for angular-fullstack yeoman generator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// I figured it out, here are the steps I took to solve this problem. For some reason, Stack Overflow isn't formatting my last 2 code blocks below. | |
// 1. store the url to return to in a cookie within the '.run()' method of `client/app/app.js` | |
.run(function ($rootScope, $location, Auth, $cookieStore) { | |
// Redirect to login if route requires auth and you're not logged in | |
$rootScope.$on('$stateChangeStart', function (event, next) { | |
Auth.isLoggedInAsync(function(loggedIn) { | |
if (next.authenticate && !loggedIn) { | |
// store the requested url if not logged in | |
if ($location.url() != '/login') | |
{ | |
$cookieStore.put('returnUrl', $location.url()); | |
} | |
$location.path('/login'); | |
} | |
}); | |
}); | |
}); | |
// 2. for Oauth, check for this cookie and redirect if it exists in `server/auth/auth.service.js` | |
function setTokenCookie(req, res) { | |
if (!req.user) { | |
return res.json(404, { message: 'Something went wrong, please try again.'}); | |
} | |
var token = signToken(req.user._id, req.user.role); | |
res.cookie('token', JSON.stringify(token)); | |
// return the user to the request page (oAuth) or homepage | |
if (typeof req.cookies.returnUrl != 'undefined') | |
{ | |
res.redirect(req.cookies.returnUrl.replace(/"/g, "") || '/'); | |
} | |
else | |
{ | |
res.redirect('/'); | |
} | |
} | |
// 3. for local login, check for cookie in the `.then()` part of `$scope.login()`, file: `client/app/account/login/login.controller.js` | |
.then( function() { | |
// Logged in, redirect to home | |
if (typeof $cookieStore.get('returnUrl') != 'undefined' && $cookieStore.get('returnUrl') != '') | |
{ | |
$location.path($cookieStore.get('returnUrl')); | |
$cookieStore.remove('returnUrl'); | |
} | |
else | |
{ | |
$location.path('/'); | |
} | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
An option to use state instead of path/url
Before login:
$cookieStore.put('redirectState', next.name);
After login:
this.$state.go(this.$cookieStore.get('redirectState'));
this.$cookieStore.remove('redirectState');