0

我正在使用 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 中清除返回的令牌。

你能帮我弄清楚,我应该如何以及在哪里真正使用它?

4

1 回答 1

1

这是一种通用的解决方案,我会删除 ASP.NET SPA 的东西。也许使用 Knockout,ASP.NET SPA 模板提供了一些价值,但 Angular 可以完成您想要做的所有事情,而无需与您的服务器端模板作斗争。

理想情况下,您的 Angular 应用程序被视为后端服务的任何其他客户端(Android 或 iOS)。您的后端 API 可以公开您需要的所有功能,包括身份验证 - 没有理由将您的用户拉出 Angular 应用程序只是为了进行身份验证。

如果您想引导您的应用程序,ASP.NET SPA 的替代方法是使用Yeoman 生成器。试试Angular Fullstack 生成器,它很好地演示了如何在 Angular 应用程序中验证用户。

于 2015-06-07T14:18:40.983 回答