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

问题描述 投票:1回答:1

我研究了几个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
        }
asp.net-core f#
1个回答
2
投票

我正在看长颈鹿的例子。

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

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

UseAuthentication添加的服务称为AuthenticationMiddleware。正如你所看到的,这个中间件依赖于一个注入的IAuthenticationSchemeProvider(由你调用AddAuthentication提供),反过来(在这里跳过几步)依赖于一个名为CookieAuthenticationhandler的服务(由你调用AddCookie提供),它实际上做了验证的工作。通过cookie。完成后,将登录用户设置到HttpContext上,如果需要,可以从控制器中引用。

© www.soinside.com 2019 - 2024. All rights reserved.