2013-02-02 13 views
19

में लॉग इन किया गया है, तो मैं इंडेक्स पेज को रीडायरेक्ट कर रहा हूं। मैं उस पृष्ठ को बदलने की कोशिश कर रहा हूं जब उपयोगकर्ता मेरी वेबसाइट पर जाता है। अगर वे अज्ञात हैं तो उन्हें रजिस्टर पेज देखना चाहिए। अगर वे लॉग इन हैं तो उन्हें अपने डैशबोर्ड को देखना चाहिए।यदि उपयोगकर्ता AngularJS

मेरे पास एक ऐसी सेवा है जो यह देखने के लिए जांचती है कि उपयोगकर्ता लॉग इन है (उदा। चेक कुकीज़) जो कोणीय सेवाओं को लोड करते समय ट्रिगर करता है। मैंने रीडायरेक्ट करने के लिए $ रूटप्रोवाइडर का उपयोग करने का प्रयास किया है, लेकिन जब $ रूटप्रोवाइडर शुरू किया जा रहा है तो सेवा ट्रिगर नहीं की गई है, इसलिए यह हमेशा सोचता है कि उपयोगकर्ता लॉग इन नहीं है।

प्रारंभिक पृष्ठ एक बार आसानी से रीडायरेक्ट कर सकता है लोड किया गया लेकिन मैं लोड किए गए पहले पृष्ठ को रीडायरेक्ट करने के लिए संघर्ष कर रहा हूं। क्या कोई इस बारे में सलाह दे सकता है कि यह कैसे करें?

+0

https://groups.google.com/forum/#!msg/angular/ki5rzHoRciw/0hBkkXSfvlMJ –

उत्तर

20

उत्तर के तहत टिप्पणी को पढ़ना सुनिश्चित करें। जब मैंने इस सवाल का जवाब दिया तो मैंने यूनिट परीक्षण और डिजाइन के बारे में नहीं सोचा था। मैं बस यह दिखा रहा था कि वांछित परिणाम प्राप्त करने के कई तरीकों में से एक क्या हो सकता है

मुझे लगता है कि इसे नियंत्रक या आपके app.config.run के तहत करने का सबसे अच्छा तरीका है। अपने मामले में आपको उपयोगकर्ता लॉगिन स्थिति की जांच करने के लिए एक और मॉड्यूल बनाना चाहिए। अपने ऐप मॉड्यूल में उपयोगकर्ता लॉगिन स्थिति जांच मॉड्यूल इंजेक्ट करें।

यहाँ नमूना app.js कोड

http://plnkr.co/edit/dCdCEgLjLeGf82o1MttS

var login = angular.module('myLoginCheck', []) 
    .factory('$logincheck', function() { 
    return function (userid) { 
     // Perform logical user logging. Check either 
     // by looking at cookies or make a call to server. 
     if (userid > 0) return true; 
     return false; 
    }; 
    }); 

var app = angular.module('myApp', ['myLoginCheck']); 

app.config(function ($routeProvider, $locationProvider) { 
    $routeProvider 
     .when('/publicurl', {}) 
     .when('/loginurl', {}) 
     .when('/unauthorize', {}) 
     .otherwise({redirectTo: '/'}); 
    }) 
    .run(function ($logincheck, $location) { 
    //console.log("Into run mode"); 
    console.log("Userid 5 is logged in: ", $logincheck(5)); 
    console.log("Userid 0 logged in: ", $logincheck(0)); 

    //now redirect to appropriate path based on login status 
    if ($logincheck(0)) { 
     //$location.path('/loginurl'); or   
    } 
    else { 
     //$location.path('/publicurl'); or 
    } 
    }); 

app.controller('MainCtrl', function ($scope) { 
    $scope.name = 'World'; 
}); 
+1

आपकी प्रतिक्रिया के लिए धन्यवाद। मेरे पास यह मुद्दा है कि $ रूटप्रोवाइडर का उपयोग करते समय मैं यह तर्क देखने के लिए तर्क का उपयोग नहीं कर सकता कि उपयोगकर्ता लॉग इन है या नहीं, क्योंकि सेवाओं को लोड होने से पहले app.config लोड किया गया है। जब तक कि मैं इसे गलत नहीं कर रहा हूं और उपयोगकर्ताओं को कुकीज़ देखने के लिए एक तरीका है यह देखने के लिए कि क्या वे सेवाओं का उपयोग किये बिना लॉग इन हैं? यदि ऐसा है, तो जब मैं app.config सेट अप करता हूं तो मैं इसकी जांच कर सकता हूं। धन्यवाद – rorymadden

+0

यह बिल्कुल काम करने योग्य है। आपको एक और मॉड्यूल बनाना होगा और उस मॉड्यूल को अपने मुख्य ऐप में इंजेक्ट करना होगा। मैंने तदनुसार अपना जवाब बदल दिया है। –

+4

मुझे यकीन नहीं है कि app.run का उपयोग करना एक अच्छा विचार है; यह कोणीय के decoupled दृष्टिकोण के खिलाफ चला जाता है और ऐप को परीक्षण करने में कठोर बनाता है --- हर बार जब आप एक परीक्षण में ऐप मॉड्यूल लोड करते हैं तो यह आपको लॉग इन करने का प्रयास करेगा! निश्चित रूप से आप वास्तव में अपने परीक्षणों में लॉग इन कर सकते हैं, लेकिन अगर आपको लॉगिन करने की आवश्यकता नहीं है तो यह बेहतर होगा। – jdg

3

मैं सिर्फ ऐसा किया,/पथ जो के रूप में उपयुक्त पुनर्निर्देश के लिए एक डमी टेम्पलेट और छोटे नियंत्रक बनाकर द्वारा पीछा करने के लिए कड़ी है।

controllers.controller('loginController', 
         ['$scope', '$location', '$cookies', 
         function($scope, $location, $cookies) { 
    if (!!$cookies.user) { 
     console.log("already logged in!"); 
     $location.path('/shows'); 
    } else { 
     console.log("need to login!"); 
     $location.path('/users'); 
    } 
}]); 

var app = angular.module('app', ['ngRoute', 'ngCookies', 'controllers', 'services']); 

app.config(['$routeProvider', 
      function($routeProvider) { 
    $routeProvider.when('/users', { 
     templateUrl: "partial/users.html", 
     controller: 'userController' 
    }); 
    $routeProvider.when('/shows', { 
     templateUrl: "partial/shows.html", 
     controller: 'showController' 
    }); 
    $routeProvider.when('/', { 
     template: '', 
     controller: 'loginController' 
    }); 
    $routeProvider.otherwise({ 
     redirectTo: '/' 
    }); 
}]);