2014-09-21 97 views
0

我認爲我錯過了一些東西,但是在實現例如用戶激活過程中使用發送給用戶電子郵件的鏈接時遇到問題。AngularJS直接向後臺傳遞請求

我有註冊頁面。填寫表格後,請求被髮送到後端,一些邏輯完成,並且郵件也被髮送到用戶的郵箱。在這封郵件中有激活鏈接。 這裏我的問題開始 - 我希望用戶點擊該鏈接並將其移動到我的頁面,但我想直接將此令牌傳遞到後端以檢查其有效性,激活帳戶並在最後將用戶重定向到登錄頁面。

如何正確實施?

這對AngularJS應用程序我目前的路由配置:

$routeProvider.when('/', { 
    templateUrl: 'views/main.html', 
    controller: 'appController' 
}).when('/login', { 
    templateUrl: 'views/login.html', 
    controller: 'userController' 
}).when('/signup', { 
    templateUrl: 'views/signup.html', 
    controller: 'userController' 
}).when('/activate/:activationToken', { 
    templateUrl: 'views/activate.html', 
    controller: 'userController' 
}).otherwise({ 
    redirectTo: '/' 
}); 

這對node.js的我當前後端路由配置:

router.post('/users/login', userHelper.shouldNotBeLoggedIn, authentication.login); 
router.post('/users/signup', userHelper.shouldNotBeLoggedIn, authentication.signup); 
router.get('/users/logout', userHelper.shouldBeLoggedIn, authentication.logout); 
router.get('/users/activate/:token', userHelper.shouldNotBeLoggedIn, authentication.activate); 

這裏是我從後端數據返回到前端:

if (err) { 
    logger.error(util.inspect(err)); 
    res.status(403).json({message: err.code}); 
} else { 
    res.status(200).json({message: 'accountActivated'}); 
} 

回答

0

一種方法是使用純後端URL +視圖來處理帳戶激活如果令牌是正確的,那麼302重定向到Angular應用程序所在的常規URL。如果令牌不正確,請重定向至顯示錯誤消息的URL。


更新:

在UserController中,當URL激活電子郵件發送的URL(這可能已經存在於/activate/:activationToken),發送這樣的令牌後端匹配:

// Make sure to inject $http and $routeParams in your controller. 
$http.post('/users/activate/' + $routeParams.activationToken, {}).success(function(response) { 
    console.log('Yay'); 
}).error(function(response) { 
    console.error(response.data.message) 
}); 
+0

你有沒有Angular的配置例子來支持那些'純後端網址'? – Bananan 2014-09-21 10:39:42

+0

Angular不處理純粹的後端URL,它在這個階段甚至沒有出現。你需要在你的服務器上處理這個,然後重定向到你的Angular應用程序。 – Blaise 2014-09-21 10:40:51

+0

我編輯了我的問題並添加了當前的路由配置。如果我打開任何其他路徑中的鏈接而不是'when'方法指定的鏈接,那麼我將被重定向到/ by'otherwise'方法。 – Bananan 2014-09-21 10:43:47