Cookie身份验证:如何访问返回的用户

时间:2017-12-19 14:59:28

标签: asp.net-core f#

我研究了几个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
        }

1 个答案:

答案 0 :(得分:2)

我正在看长颈鹿的例子。

语句services.AddAuthentication(authScheme)services.AddCookie(cookieAuth)将向服务集合添加各种服务,使其可用于注入。

声明app.UseAuthentication()将服务添加到middleware pipeline。中间件服务是在每个请求上运行的东西。

UseAuthentication添加的服务称为AuthenticationMiddleware。正如您所看到的,此中间件依赖于注入的IAuthenticationSchemeProvider(由您对AddAuthentication的调用提供),而后者(在此处跳过几个步骤)依赖于名为CookieAuthenticationhandler的服务(由您对AddCookie)的调用实际上是通过cookie进行身份验证的工作。完成后,将登录用户设置到HttpContext上,如果需要,可以从控制器中引用。