我正在嘗試創建DotNetOpenAuth OpenID MVC 3項目,但無法接收用戶身份驗證狀態。我的post方法工作正常,但當請求返回到HttpGet方法,並且我檢查User.Identity.IsAuthenticated狀態時,它會在我已成功登錄到任何openID提供程序時返回false。MVC 3 - DotNetOpenAuth OpenID未返回經過身份驗證的用戶
我已經啓用了在webconfig dotNetOpenAuth untrustedWebRequest尚未解決的問題本地主機通信,我已經花了幾個小時尋找一個答案,爲什麼用戶不被返回一個身份驗證的用戶。
必須存在一些邏輯錯誤,導致用戶不能從我的代碼中驗證的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);
}
我還發現CodePlex上的Nerd Dinner項目深入到MVC 3&4的許多方面,但也有你可能需要建立一個DotNetOpenAuth openId認證用戶界面供客戶端登錄。在學習代碼時你需要付出一些努力,但它確實按照廣告的方式工作。 – Shawn