在具有.net web api后端的角度应用中,我尝试通过异步请求实现表单身份验证。
以下是我的web.config的相关部分......
<authentication mode="Forms">
<forms loginUrl="/" cookieless="UseCookies" name=".TIMETRACK" requireSSL="false" timeout="30" protection="All" path="/TimeTrack" />
</authentication>
这是我的web api登录方法......
[Route("Login")]
public HttpResponseMessage Post(AppUser credentials)
{
var userTemplate = _authenticationProvider.GetUserByEmail(credentials.Email);
var user = Mapper.Map<ClientUser>(credentials);
if (userTemplate.HashCode == _cryptographyService.HashPassword(credentials.Password, userTemplate.Salt))
{
FormsAuthentication.SetAuthCookie(userTemplate.Email, false);
user.IsAuthenticated = true;
}
return Request.CreateResponse(HttpStatusCode.OK, user);
}
这是我的角度控制器方法进行调用...
$scope.authenticate = function () {
if (validateAuthentication()) {
$http.post('Authentication/Login', { Email: $scope.email, Password: $scope.password })
.then(loginSuccess, loginFailure);
}
};
分析登录后发回的fiddler的响应我可以看到这个......
Set-Cookie: .TIMETRACK=4D69EB09BD2B5B1444FBF07D1AB5EEE86DDEFD237AF451EF38EF6FD78E56E24DBD01369DEC865F81297114FF354BF3BC5C6099C3C5D1D89C001014BE071B4CB5A3059E28DBC7D6B25EE27A6FE2A31E278106D78E8FE080F73A6C8BBD3B6B83F12FAE9CD1AEE80629AA72B1DD16E0606D92D0C74F8388A932930C15D89178F92A; path=/TimeTrack; HttpOnly
所以似乎正在创建cookie。但是,在随后对服务器的请求中......
User.Identity.IsAuthenticated
总是假的。我也没有看到任何cookie被发送回服务器的迹象。
我需要做些什么特别的事情来将身份验证cookie传回服务器吗?
为了它的价值,我已经在GitHub上完成了这个项目。你可以在这看看...... https://github.com/JosephEricDavis/TimeTrack
感谢您的帮助
答案 0 :(得分:0)
事实证明我错误地在web.config文件中的节点上设置了path属性。删除路径属性后,它开始按预期工作。
对于像我这样不知道cookie路径是什么的人。我发现这个资源很有帮助。