Facebook OAuth发布MVC4

时间:2013-10-18 21:17:13

标签: c# facebook asp.net-mvc-4 facebook-graph-api oauth

令人讨厌我一直试图解决这个问题好几个小时,每个答案都没有直接解决方案:

{
   "error": {
      "message": "Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request",
      "type": "OAuthException",
      "code": 100
   }
}

我一直在撞墙!我正在使用facebook soap客户端进行此http://pastebin.com/G7ysgbdX

这将允许我们(通过用户的许可)整合他们的时间表。 Facebook表示网址不匹配。我该如何测试?

这在本地工作,但在服务器上没有完全相同的代码,除了http://free-rsvp.com/而不是localhost:53111 /

这是以下网址。我看不出任何错误!

任何建议都将受到赞赏。

provider_%3dFacebookPro%26_ SID _%3da80359b555c54b8f8d2f4f8e803f9125&安培; client_secret = 212360b3ea6478fd0a0491e736b54256&安培;代码= AQCyTDStiB5gsQpKMx4uI1yFesVnLnWfE3u70VsB02-4HSyUCTbcf_3oHMo7QQI2as_pw1tpFONs8tClq4FxCr4AzuCMzLBsRnyOM3dcattTATdU-ahq5cjr4lPJNp2gkTrpgWUmqDEVQ8PBvYFB1LdWJpojxRIC24lv0GkQSSqdrct41UGHfDjhnPfI1mV945NgVJSfebhJP7O0GWxP9o9g_4svDCKa2LtCRbo7nDfWLeiE9fGULhmuJDjefAFZ5VMiYj8SrA4QtZXIu8jUQSQT89VYEP8PuG2hS_wMr0TL_GmcvEhNzQ8psPpPWFYhmSo"> HTTPS://graph.facebook.com/oauth/access_token? CLIENT_ID = 523007704381​​837&安培; REDIRECT_URI = HTTP%3A%2F%2ffree-rsvp.com%3A80%2fAccount%2fExternalLoginCallback%3fReturnUrl%3D%252FDashboard%26_ 提供商 _%3dFacebookPro%26_ SID _%3da80359b555c54b8f8d2f4f8e803f9125&安培; client_secret = 212360b3ea6478fd0a0491e736b54256&安培;代码= AQCyTDStiB5gsQpKMx4uI1yFesVnLnWfE3u70VsB02-4HSyUCTbcf_3oHMo7QQI2as_pw1tpFONs8tClq4FxCr4AzuCMzLBsRnyOM3dcattTATdU-ahq5cjr4lPJNp2gkTrpgWUmqDEVQ8PBvYFB1LdWJpojxRIC24lv0GkQSSqdrct41UGHfDjhnPfI1mV945NgV JSfebhJP7O0GWxP9o9g_4svDCKa2LtCRbo7nDfWLeiE9fGULhmuJDjefAFZ5VMiYj8SrA4QtZXIu8jUQSQT89VYEP8PuG2hS_wMr0TL_GmcvEhNzQ8psPpPWFYhmSo

修改 把我带到facebook的网址是:

provider_%253DFacebookPro%2526_ SID _%253Dbfe82f104ab34d1aa0f44c477c4d7819%26scope%3Demail%252Cuser_likes%252Cfriends_likes%252Cuser_birthday%252Cpublish_checkins%252Cpublish_stream%26client_id%3D523007704381​​837%26ret%3Dlogin&安培; cancel_uri = HTTP%3A%2F% 2Ffree-rsvp.com%2FAccount%2FExternalLoginCallback%3FReturnUrl%3D%252FDashboard%26_ 提供商 _%3DFacebookPro%26_ SID _%3Dbfe82f104ab34d1aa0f44c477c4d7819%26error%3Daccess_denied%26error_code%3D200% 26error_description%3DPermissions%2Berror%26error_reason%3Duser_denied%23_%3D_&安培;显示=页面"> HTTPS:?//www.facebook.com/login.php skip_api_login = 1&安培; API_KEY = 523007704381​​837&安培; signed_next = 1&安培;下一= HTTPS%3A%2F%2Fwww.facebook.com%2Fdialog%2Foauth%3Fredirect_uri%3Dhttp%253A%252F%252Ffree-rsvp.com%252FAccount%252FExternalLoginCallback%253FReturnUrl%253D%252FDashboard%2526_ 提供商 _ %253DFacebookPro%2526_ SID _%253Dbfe82f104ab34d1aa0f44c477c4d7819%26scope%3Demail%252Cuser_likes%252Cfriends_likes%252 Cuser_birthday%252Cpublish_checkins%252Cpublish_stream%26client_id%3D523007704381​​837%26ret%3Dlogin&安培; cancel_uri = HTTP%3A%2F%2Ffree-rsvp.com%2FAccount%2FExternalLoginCallback%3FReturnUrl%3D%252FDashboard%26_ 提供商 _%3DFacebookPro %26_ SID _%3Dbfe82f104ab34d1aa0f44c477c4d7819%26error%3Daccess_denied%26error_code%3D200%26error_description%3DPermissions%2Berror%26error_reason%3Duser_denied%23_%3D_&安培;显示=页

1 个答案:

答案 0 :(得分:0)

这是我的服务器端身份验证代码(MVC4项目)。你应该看看的部分是如何在“Authorize”和“AuthorizeCallback”函数中生成重定向URL - 相同 - 并传递给facebook客户端:

[HttpPost]
public ActionResult Authorize(Guid eventId)
{
    var @event = this.eventRepository.Find(eventId);

    var redirectUri = ConfigurationProvider.HostingEndpoint + this.Url.Action("AuthorizeCallback", new { eventCode = @event.Code });

    var service = new FacebookClient();
    var loginUrl = service.GetLoginUrl(new {
        client_id = ConfigurationProvider.FacebookAppId,
        client_secret = ConfigurationProvider.FacebookAppSecret,
        redirect_uri = redirectUri,
        response_type = "code",
        scope = "manage_pages, publish_actions, user_photos, publish_stream" // Add other permissions as needed
    });

    return new RedirectResult(loginUrl.AbsoluteUri, permanent: false);
}

public ActionResult AuthorizeCallback(string code, string eventCode, UserProfile userProfile)
{
    var @event = this.eventRepository.Find(eventCode);

    if (string.IsNullOrWhiteSpace(code) == true)
    {
        // means user clicked "cancel" when he was prompted to authorize the app
        // todo: show some error message? or just redirect back?
        return this.RedirectToAction("Event", "Dashboard", new { eventCode = @event.Code, feature = FeatureType.Update });
    }

    var redirectUri = ConfigurationProvider.HostingEndpoint + this.Url.Action("AuthorizeCallback", new { eventCode = @event.Code });

    var fb = new FacebookClient();
    dynamic result = fb.Post("oauth/access_token", new
    {
        client_id = ConfigurationProvider.FacebookAppId,
        client_secret = ConfigurationProvider.FacebookAppSecret,
        redirect_uri = redirectUri,
        code = code
    });

    var accessToken = result.access_token;

    // update the facebook client with the access token so 
    // we can make requests on behalf of the user
    fb.AccessToken = accessToken;

    // Get the user's information
    dynamic me = fb.Get("me");

    return this.RedirectToAction("Event", "Dashboard", new { eventCode = @event.Code, feature = FeatureType.Update });
}