我正在使用 ASP.NET SPA 模板,但重新制作它以使用 AngularJS 而不是 KnockoutJS。我遇到的问题是授权访问令牌。默认情况下,在此模板中,通过将用户重定向到 来检索授权访问令牌,之后,将用户作为参数/Account/Authorize?client_id=web&response_type=token
重定向到主页。/#access_token=TOKEN_HERE&token_type=bearer&expires_in=1209600
在 KO 模板中,有一个common
带有函数的对象,getFragment
它读取这个 url 参数,并返回这个访问令牌。在模板中,有这段代码,每次重新加载页面时都会执行
if (!dataModel.getAccessToken()) {
// The following code looks for a fragment in the URL to get the access token which will be
// used to call the protected Web API resource
var fragment = common.getFragment();
if (fragment.access_token) {
// returning with access token, restore old hash, or at least hide token
window.location.hash = fragment.state || '';
dataModel.setAccessToken(fragment.access_token);
} else {
// no token - so bounce to Authorize endpoint in AccountController to sign in or register
window.location = "/Account/Authorize?client_id=web&response_type=token&state=" + encodeURIComponent(window.location.hash);
}
}
dataModel.get/setAccessToken
将令牌作为变量存储在 LocalStorage 中。如果本地存储中没有访问令牌,我试图将这段代码插入 AngularJS 控制器,重定向用户。但是如果我使用 ngRoute,它会与响应混淆。它将 URL 更改为在 app.Config 中设置的默认路由,并在我读取它之前从 URL 中清除返回的令牌。
你能帮我弄清楚,我应该如何以及在哪里真正使用它?