Asp.net mvc MVC 3-DotNetOpenAuth OpenID未返回经过身份验证的用户

Asp.net mvc MVC 3-DotNetOpenAuth OpenID未返回经过身份验证的用户,asp.net-mvc,openid,Asp.net Mvc,Openid,我正在尝试创建DotNetOpenAuth OpenID MVC 3项目,但无法接收用户身份验证状态。我的post方法工作正常,但是当请求返回到HttpGet方法,并且我检查User.Identity.IsAuthenticated状态时,当我成功登录到任何openID提供程序时,它返回false 我已经在webconfig dotNetOpenAuth untrustedWebRequest中启用了与localhost的通信,但这并没有解决问题,我还花了几个小时来搜索用户为什么没有作为经过身份

我正在尝试创建DotNetOpenAuth OpenID MVC 3项目,但无法接收用户身份验证状态。我的post方法工作正常,但是当请求返回到HttpGet方法,并且我检查User.Identity.IsAuthenticated状态时,当我成功登录到任何openID提供程序时,它返回false

我已经在webconfig dotNetOpenAuth untrustedWebRequest中启用了与localhost的通信,但这并没有解决问题,我还花了几个小时来搜索用户为什么没有作为经过身份验证的用户返回的答案

一定有一些逻辑错误会导致用户无法从openID提供程序返回,因为在我的代码中进行了身份验证,但我找不到它

谢谢你对我的问题的回复

我的控制器:

namespace DotNetOpenAuth_OpenID.Controllers
{
    public class UserController : Controller
    {
    private static OpenIdRelyingParty openid = new OpenIdRelyingParty();
    public IFormsAuthenticationService FormsService { get; set; }

    protected override void Initialize(RequestContext requestContext)
    {
        if (FormsService == null)
        {
            FormsService = new AuthenticationService();
        }

        base.Initialize(requestContext);
    }

    // **************************************
    // URL: /User/LogIn
    // **************************************
    [HttpGet]
    public ActionResult LogIn()
    {
        if (User.Identity.IsAuthenticated) <===== RETURNS FALSE
        {
            return RedirectToAction("Profile", "User");
        }

        Identifier id;
        if (Identifier.TryParse(Request.Form["openid_identifier"], out id))
        {
            try
            {
                var req = openid.CreateRequest(Request.Form["openid_identifier"]);
                return req.RedirectingResponse.AsActionResult();
            }
            catch (ProtocolException ex)
            {
                 //display error by showing original LogOn view
                //this.ErrorDisplay.ShowError("Unable to authenticate: " + ex.Message);
                return View("Login");
            }
           //return LogIn(new User { OpenID = id }, Request.Form["ReturnUrl"]);
        }
        return View("Login");
    }

    [HttpPost]
    public ActionResult LogIn(User model, string returnUrl)
    {

        string openID = ModelState.IsValid ? model.OpenID :       Request.Form["openid_identifier"];

        if (User.Identity.IsAuthenticated)
        {
            return RedirectToAction("Profile", "User");
        }
        else if (!string.IsNullOrEmpty(openID))
        {
            return Authenticate(openID, returnUrl);
        }
        else if (ModelState.IsValid)
        {
            ModelState.AddModelError("error", "The OpenID field is required.");
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }
名称空间DotNetOpenAuth\u OpenID.Controllers
{
公共类UserController:Controller
{
私有静态OpenIdRelyingParty openid=新OpenIdRelyingParty();
公共身份验证服务FormsService{get;set;}
受保护的覆盖无效初始化(RequestContext RequestContext)
{
if(FormsService==null)
{
FormsService=新的AuthenticationService();
}
初始化(requestContext);
}
// **************************************
//URL:/用户/登录名
// **************************************
[HttpGet]
公共操作结果登录()
{

如果(User.Identity.IsAuthenticated)我遵循的示例可以在中找到,但尚未实现所有代码,这就是用户从未通过身份验证返回的原因。我缺少对var response=openid.GetResponse()的调用这是在控制器中另一个名为Authenticate的方法中实现的。整个代码的另一个源代码可以在这里的堆栈溢出帖子中找到

我还在CodePlex上找到了Nerd晚餐项目,该项目深入讨论了MVC 3&4的许多方面,但也包含了构建DotNetOpenAuth openId身份验证用户int可能需要的所有内容eFace供客户端登录。在研究代码方面,您需要付出一些努力,但它确实可以像广告中所宣传的那样工作。