我研究了几个ASP.Net Core 2.0 Cookie身份验证的例子。 但是,我仍然没有看到通过cookie检查返回用户的代码。
请注意,我不是网络开发人员。结果,我意识到我的问题可能看起来很愚蠢。
据我了解,浏览器会根据客户端请求将cookie发送到服务器。但是,在我研究过的示例中,我只是没有看到服务器逻辑。因此,我只看到基于明确传入的用户名和密码第一次登录用户的逻辑。
期望:
我希望服务器在请求网站的索引页面时显式检查cookie是否存在。如果cookie确实存在,我希望看到一些逻辑来解决已经登录的用户。
这是我的代码:
let loginHandler =
fun (next : HttpFunc) (ctx : HttpContext) ->
Tasks.Task.Run(fun _ -> StackOverflow.CachedTags.Instance() |> ignore) |> ignore
task {
let! data = ctx.BindJsonAsync<LogInRequest>()
let email = data.Email.ToLower()
if authenticate email data.Password
then match login email with
| Some provider ->
let claims = [ Claim(ClaimTypes.Name, email) ]
let identity = ClaimsIdentity(claims, authScheme)
let user = ClaimsPrincipal(identity)
do! ctx.SignInAsync(authScheme, user)
return! json provider next ctx
| None -> return! (setStatusCode 400 >=> json "Invalid login") next ctx
else return! (setStatusCode 400 >=> json "Invalid login") next ctx
}
答案 0 :(得分:2)
我正在看长颈鹿的例子。
语句services.AddAuthentication(authScheme)
和services.AddCookie(cookieAuth)
将向服务集合添加各种服务,使其可用于注入。
声明app.UseAuthentication()
将服务添加到middleware pipeline。中间件服务是在每个请求上运行的东西。
UseAuthentication
添加的服务称为AuthenticationMiddleware
。正如您所看到的,此中间件依赖于注入的IAuthenticationSchemeProvider
(由您对AddAuthentication
的调用提供),而后者(在此处跳过几个步骤)依赖于名为CookieAuthenticationhandler
的服务(由您对AddCookie
)的调用实际上是通过cookie进行身份验证的工作。完成后,将登录用户设置到HttpContext
上,如果需要,可以从控制器中引用。