I am still trying to figure out how I can set up the redirects to a page if a user is logged in as I mentioned below. Any ideas on how I could do this?
On Monday, 4 August 2014 22:45:07 UTC+12, Damien Metcalf wrote: > > I have given this a bit more thought, and I have decided perhaps the best > thing for me to do would be to set it up so when a user visits '/' they are > either redirected to '/popular' if they are logged in and if they are not > logged in they see '/'. How might I be able to set something like this up? > > On Thursday, 31 July 2014 03:36:40 UTC+12, Eric Eslinger wrote: >> >> I have a similar thing, but instead of having an actual login state, I >> loaded all my login controls into the base scope (the scope on the main, >> top level element controller), and attached a modal-style high-zindex div >> to the site header. >> >> That div has an ng-if on it. So if the user isn't logged in, or logs out, >> I set user.apiToken to false, and the "click here to pick an OAUTH >> provider" div appears. >> >> The benefit to this is, it keeps the user from having to re-navigate to >> their preferred location after a successful login (otherwise it's >> annoying). This way users coming in on a deep link (say they got an email >> with one) land on the right place without having to deal with fancy state >> memory in the login route. >> >> If you really want to do those sorts of things, I'd consider putting the >> login test inside a resolve block on your state, and then catch >> $stateChangeErrors to decide if they derive from being not-authorized (403) >> or not-authenticated (401). 403 (and 404 while we're here) errors tend to >> be permanent, and probably *do* need either a redirect or at least a toast, >> but 401s are temporary. >> >> Finally, I prefer $state.go 'app.login' over $location.path, as it >> continues to exist within the ui-router's state controller rather than >> manually setting a url. >> >> e >> >> >> >> >> On Tue, Jul 29, 2014 at 10:58 PM, Damien Metcalf <[email protected]> >> wrote: >> >>> If user visits the base url or '/' and they are *not logged in* to the >>> application I would like them to see the *'welcome' state*. However *if >>> a user is logged in* I would like them to see the *'home' state*. So a >>> user would be able to browse around the site but when ever they went to '/' >>> they will only see the state they have permission to see. >>> >>> I am using the angular-fullstack generator with express, sockets & >>> MongoDB and Ui-Router >>> >>> Here is how I currently have things: >>> >>> 'use strict'; >>> >>> >>> angular.module('cbuiRouterApp', [ >>> 'ngCookies', >>> 'ngResource', >>> 'ngSanitize', >>> 'ui.bootstrap', >>> 'btford.socket-io', >>> 'ui.router', >>> ]) >>> >>> .config(function ($stateProvider, $urlRouterProvider, >>> $locationProvider, $httpProvider) { >>> $urlRouterProvider >>> .otherwise('/'); >>> >>> $stateProvider >>> .state('main', { >>> url: '/', >>> templateUrl: 'app/main/main.html', >>> controller: 'MainCtrl', >>> title: 'Main', >>> mainClass: 'main' >>> }) >>> .state('welcome', { >>> url: '/', >>> templateUrl: 'app/welcome/welcome.html', >>> controller: 'WelcomeCtrl', >>> title: 'Welcome', >>> mainClass: 'welcome' >>> }) >>> .state('login', { >>> url: '/login', >>> templateUrl: 'app/account/login/login.html', >>> controller: 'LoginCtrl' >>> }); >>> >>> >>> $locationProvider.html5Mode(true); >>> $httpProvider.interceptors.push('authInterceptor'); >>> }) >>> >>> >>> .factory('authInterceptor', function ($rootScope, $q, $cookieStore, >>> $location) { >>> return { >>> // Add authorization token to headers >>> request: function (config) { >>> config.headers = config.headers || {}; >>> if ($cookieStore.get('token')) { >>> config.headers.Authorization = 'Bearer ' + $cookieStore.get( >>> 'token'); >>> } >>> return config; >>> }, >>> >>> >>> // Intercept 401s and redirect you to login >>> responseError: function(response) { >>> if(response.status === 401) { >>> $location.path('/login'); >>> // remove any stale tokens >>> $cookieStore.remove('token'); >>> return $q.reject(response); >>> } >>> else { >>> return $q.reject(response); >>> } >>> } >>> }; >>> }) >>> >>> >>> .run(function ($rootScope, $location, Auth) { >>> // Redirect to login if route requires auth and you're not logged in >>> $rootScope.$on('$stateChangeStart', function (event, next) { >>> if (next.authenticate && !Auth.isLoggedIn()) { >>> $location.path('/login'); >>> } >>> }); >>> }); >>> >>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "AngularJS" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To post to this group, send email to [email protected]. >>> Visit this group at http://groups.google.com/group/angular. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- You received this message because you are subscribed to the Google Groups "AngularJS" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/angular. For more options, visit https://groups.google.com/d/optout.
