2011-03-16 35 views
2

尝试使用StartSignInWithTwitter方法。在抛出异常后立即调用该方法。这是使用最新版本的DotNetOpenAuth。这与我在本地开发和运行有什么关系? (VS2010)这是我应该如何进行身份验证的第一个地方?我在源代码中包含的Samples包中看到了一些不同的方法。DotNetOpenAuth Twitter消费开始登录

{“远程服务器返回错误:(401)未经授权。”}

我的代码看起来像下面:

public void TwitAuthInit() 
    { 
     TwitterConsumer.StartSignInWithTwitter(false).Send(); 
    } 

    public ActionResult TwitAuth() 
    { 
     if (TwitterConsumer.IsTwitterConsumerConfigured) 
     { 
      string screenName; 
      int userId; 
      if (TwitterConsumer.TryFinishSignInWithTwitter(out screenName, out userId)) 
      { 

       FormsAuthentication.SetAuthCookie(screenName, false); 
       return RedirectToAction("Home", "Index"); 
      } 

     } 

     return View(); 
    } 
+0

你可以添加到你的问题是否分布式的Twitter样本适合你? –

+0

我无法使它与示例分发一起工作。同样的确切错误。它可能是Twitters上的一些事物吗?我没有注册申请。在Twitter上配置的任何URL都必须与我的本地地址匹配吗?这可能是我通过使用Visual Studio通过本地主机运行的问题。 – aherrick

+2

然后,您的Twitter用户最有可能出现注册问题。请务必在注册页面中选择应用程序类型=浏览器。实际上,根据我的经验,URL并不重要。 –

回答

1

要回答你关于“问题是我应该怎么做认证在第一位?“:

你可能不应该呼吁SetAuthCookie(screenName, false)与你的screenName,因为屏幕名称(我相信)可以回收。您应该使用唯一的ID登录用户,您可以在您自己的用户数据库或Twitter中创建一个ID,然后仅将该屏幕名称用作向用户显示的别名(也可能是其他用户,如果此用户是张贴一些东西供公众观看)。否则,当Twitter回收用户名时,该用户将继承您网站上的旧用户的所有数据 - 这并不好。

+0

安德鲁 - 感谢您的评论,好的名字太安德鲁在这里以及。哈哈。但是,我确实知道screenName。我的意思是更多的适当的代码来调用/接受来自Twitter的回复。我已经看到了我的发布方式,也见过使用TokenManager。你有什么建议? – aherrick

+0

总是有TokenManager参与,所以我不确定“你的方式”与“使用TokenManager”有什么不同。 –

1

想要确认401错误确实是通过在twitter应用程序配置页面上设置非空回调URL解决的。

从设置页面的应用程序类型的块:

To restrict your application from using callbacks, leave this field blank.

1

你必须进入TwitterConsumer.cs并更改以下网址:

Request token URL https://api.twitter.com/oauth/request_token 
Authorize URL https://api.twitter.com/oauth/authorize 
Access token URL https://api.twitter.com/oauth/access_token 

由于Twitter改变了自己的网址。我没有得到备忘录,并花费太多时间来调试。