我可以使用Windows Identity和OWIN对Facebook和本地数据库进行身份验证。我能够在两个实例中成功返回ClaimsIdentity
。在没有错误的情况下,我能够使用ClaimsIdentity
登录AuthenticationManager
。
当您在创建项目时选择“单个用户帐户”时,我正在使用MVC 5帐户控制器的脚手架代码。我已经为登录方法添加了一些调试行以提供更多细节:
private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
Debug.WriteLine("identity.Name = " + identity.Name);
Debug.WriteLine("identity.Claims.Count() = " + identity.Claims.Count().ToString());
Debug.WriteLine("AuthenticationManager.User.Identity.IsAuthenticated = " + AuthenticationManager.User.Identity.IsAuthenticated)
Debug.WriteLine("this.User.Identity.IsAuthenticated = " + this.User.Identity.IsAuthenticated);
}
调试语句产生:
identity.Name = Cleo
identity.Claims.Count() = 3
AuthenticationManager.User.Identity.IsAuthenticated = False
this.User.Identity.IsAuthenticated = False
我的身份正在由我的本地数据库或Facebook填充,当我尝试使用AuthenticationManager
登录时,它似乎工作(或者至少没有引发错误),但似乎我无法确定用户是否在我的应用程序的上下文中进行了身份验证。
答案 0 :(得分:0)
我在Startup.Auth.cs中使用了CookieSecure = CookieSecureOption.Always
,这对我产生了这种行为。
我删除了它,现在身份验证成功了。