(Tweetinvi) - AuthFlow.CreateCredentialsFromVerifierCode(verifierCode,token);返回null

时间:2017-01-06 14:22:36

标签: oauth asp.net-mvc-5 twitter-oauth nullreferenceexception tweetinvi

今天我试图将我的令牌认证与我的网站的其余部分集成,但是当我测试代码时它没有用。我知道它以前工作过,我没有改变任何事情,所以发生了什么?

除了Twitter我在Facebook和LinkedIn身份验证代码方面遇到同样的问题,这两个女巫之前也工作得很好???

从一开始我就去了Tweetinvi的维基页面:https://github.com/linvi/tweetinvi/wiki/Authentication 我复制了代码测试和调试它。

首先我遇到了ValidateTwitterAuth ActionResult中的(token = new AuthenticationToken)的问题,但是我修复了那条有效的指令。但接下来的问题是 ITwitterCredentials userCreds null ,我不明白为什么?

我该如何解决这个问题? 这个问题的原因是否与阻止我的其他令牌处理程序工作的原因相同?

我的代码:

(家庭控制器的一部分)

(我确实删除了app-id和app-secret但我检查了那些不是问题)

private IAuthenticationContext _authenticationContext;

// Step 1 : Redirect user to go on Twitter.com to authenticate
public ActionResult TwitterAuth()
{
    var appCreds = new ConsumerCredentials("APP-ID", "APP-SECRET");

    // Specify the url you want the user to be redirected to
    var redirectURL = "http://" + Request.Url.Authority +"/Home/ValidateTwitterAuth";
    _authenticationContext = AuthFlow.InitAuthentication(appCreds, redirectURL);

    return new RedirectResult(_authenticationContext.AuthorizationURL);
}


public ActionResult ValidateTwitterAuth()
{
    var token = new AuthenticationToken()
    {
        AuthorizationKey = "APP-ID",
        AuthorizationSecret = "APP-SECRET",
        ConsumerCredentials = new ConsumerCredentials("APP-ID", "APP-SECRET")
    };


    // Get some information back from the URL
    var verifierCode = Request.Params.Get("oauth_verifier");

    // Create the user credentials
    ITwitterCredentials userCreds = AuthFlow.CreateCredentialsFromVerifierCode(verifierCode, token);

    // Do whatever you want with the user now!
    ViewBag.User = Tweetinvi.User.GetAuthenticatedUser(userCreds);


    string access_token = userCreds.AccessToken;
    string access_token_secret = userCreds.AccessTokenSecret;


    return RedirectToAction("Index", "Home");
}

提前致谢

1 个答案:

答案 0 :(得分:1)

您的问题来自以下方面:

var token = new AuthenticationToken()
{
    AuthorizationKey = "APP-ID",
    AuthorizationSecret = "APP-SECRET",
};

AuthorizationKeyAuthorizationSecret不是APP_IDAPP_SECRET

您应该从_authenticationContext中创建的ActionResult TwitterAuth()中获取这些信息。

存储此信息的方法有多种,以便在回调完成后可以访问它。

如果您没有使用负载平衡,我建议使用以下代码使用url参数:

public ActionResult TwitterAuth()
{
    var appCreds = new ConsumerCredentials(MyCredentials.CONSUMER_KEY, MyCredentials.CONSUMER_SECRET);
    var redirectURL = "http://" + Request.Url.Authority + "/Home/ValidateTwitterAuth";
    var authenticationContext = AuthFlow.InitAuthentication(appCreds, redirectURL);

    return new RedirectResult(authenticationContext.AuthorizationURL);
}

public ActionResult ValidateTwitterAuth()
{
    var verifierCode = Request.Params.Get("oauth_verifier");
    var authorizationId = Request.Params.Get("authorization_id");

    if (verifierCode != null)
    {
        var userCreds = AuthFlow.CreateCredentialsFromVerifierCode(verifierCode, authorizationId);
        var user = Tweetinvi.User.GetAuthenticatedUser(userCreds);

        ViewBag.User = user;
    }

    return View();
}

您可以在此处详细了解此主题:https://github.com/linvi/tweetinvi/wiki/Authentication#web-application-considerations