请求将教程添加到NerdDinner ASP.NET MVC应用程序的教程

TMC*_*C2K 26 asp.net-mvc dotnetopenauth nerddinner

我正在寻找使用ASP.NET MVC NerdDinner教程学习ASP.NET MVC和OpenId.

我想将NerdDinner中的身份验证系统替换为仅OpenId.我已经下载了最新的DotNetOpenAuth库,但我不知道如何将它们放在一起.任何人都可以帮助快速一步一步的教程吗?

这是否像在库中删除一样简单,还是应用程序需要进行重大更改?

nik*_*d23 14

下载dotnetopenid后,请查看samples\RelyingPartyMvc目录.有一个示例,他们用OpenID替换默认的MVC身份验证系统.相关代码位于Controllers/UserController.cs中.以下是Authenticate操作:

//Stage 1: Show form asking for Open ID identifier URL
var openid = new OpenIdRelyingParty();
if (openid.Response == null) {
    // Stage 2: user submitting Identifier
    Identifier id;
    if (Identifier.TryParse(Request.Form["openid_identifier"], out id)) {
            openid.CreateRequest(Request.Form["openid_identifier"]).RedirectToProvider();
    } else {
            ViewData["Message"] = "Invalid identifier";
            return View("Login");
            }
} else {
    // Stage 3: OpenID Provider sending assertion response
    switch (openid.Response.Status) {
        case AuthenticationStatus.Authenticated:
            FormsAuthentication.RedirectFromLoginPage(openid.Response.ClaimedIdentifier, false);
            break;
        case AuthenticationStatus.Canceled:
            ViewData["Message"] = "Canceled at provider";
            return View("Login");
        case AuthenticationStatus.Failed:
            ViewData["Message"] = openid.Response.Exception.Message;
            return View("Login");
    }
}
return new EmptyResult();
Run Code Online (Sandbox Code Playgroud)


Ale*_*yev 7

不是NerdDinner特有的,但对于想要在其ASP.NET MVC应用程序中实现OpenId支持的人可能有用:


TMC*_*C2K 6

好的,所以我得到了这种工作!答案是以下答案的组合加上一些控制器和视图.

首先下载DotNetOpenAuth,然后导航到samples目录,在那里可以找到OpenIdRelayingPartyMvc代码.在我的NerdDinner解决方案中,

  • 我添加了对DotNetOpenAuth程序集的引用
  • 添加了新的"UserController"并从示例的UserController中复制了代码
  • 添加了正确的using语句并更改了命名空间以反映NerdDinner.Controllers
  • 从示例中重新创建了类似的"用户"视图,并相应地更改它们以反映站点主内容ID.
  • 在家庭控制器下添加了一个xrds视图.(不知道这是做什么的)
  • 更改了索引并在HomeController中添加了Xrds ActionResult方法以反映样本.
  • 更改了web.config文件(在根文件夹中)验证部分以更改新UserController和Login方法的登录路径
  • 更改"LogOnUserControl"ActionLinks以指向新的UserControl和"Login"和"Logout"方法.
  • 用各种视图直接调用登录功能

现在这种方式有限.我可以使用OpenID登录并与NerdDinner应用程序进行交互.这太酷了.但是某些功能尚不起作用.保存创建的晚餐不起作用,但它也不会挂起.我将不得不研究如何将AccountController中的一些成员资格功能迁移到UserController.我将更新这篇文章(欢迎提出建议和指示).