2014-12-05 17 views
0

與UI路由器服務頁面我無法找到任何資源網上我的具體情況。檢查如果用戶在Node.js的後端認證,並在角

在後端我使用的NodeJS PassportJS來驗證用戶身份。

當用戶請求index頁面時,我希望他看到他的主頁(類似於facebook.com如何帶您到您的個人訂閱源)或如果他沒有通過身份驗證登錄頁面。

,而不是服務器的處理要發送的網頁回來,因爲我不想讓用戶感到重定向,我想角UI的路由器來處理它。

也就是說,當用戶請求一個頁面,我想UI的路由器來處理他看到的頁面。

有沒有辦法做到這一點?最好是一個非常簡單的方法。

回答

1

是的,你可以在ui路由器中使用解析。

比方說你有一個驗證服務(例如,我使用$ firebaseSimpleLogin)您可以在工廠定義。

.factory('Auth', function ($firebaseSimpleLogin, FIREBASE_URL, $rootScope, $firebase) { 
var ref = new Firebase(FIREBASE_URL); 
var auth = $firebaseSimpleLogin(ref); 

var Auth = { 
    register: function (user) { 
    return auth.$createUser(user.email, user.password); 
    }, 
    createProfile: function (user) { 
    var profile = { 
     username: user.username, 
     md5_hash: user.md5_hash 
    }; 

    var profileRef = $firebase(ref.child('profile')); 
    return profileRef.$set(user.uid, profile); 
    }, 
    login: function (user) { 
    return auth.$login('password', user); 
    }, 
    logout: function() { 
    auth.$logout(); 
    }, 
    resolveUser: function() { 
    return auth.$getCurrentUser(); 
    }, 
    signedIn: function() { 
    return !!Auth.user.provider; 
    }, 
    user: {} 
}; 


$stateProvider 
.state('TestPageCtrl', { 
    url: 'testpage', 
    templateUrl: 'test/testpage.html', 
    controller: 'AuthCtrl', 
    resolve: { 
     user: function(Auth) { 
     return Auth.resolveUser(); 
     } 
    } 
    }); 

所以現在使用這個用戶可以控制用戶的訪問。

.controller('TestPageCtrl', function ($scope, $state, Auth, user) { 
    if (user) { 
     $state.go('posts'); 
    } else { 
     // redirect to a page saying that login first. 
    } 
}); 
+0

哇真棒答案!我可以添加一個子問題嗎?我可以檢測我的用戶是否通過查找cookie來授權? – CodyBugstein 2014-12-05 09:47:50

+0

我想你將不得不考慮基於cookie的認證。您將需要修改您的服務。檢查這個http://beletsky.net/2013/11/simple-authentication-in-angular-dot-js-app.html – 2014-12-05 09:57:17