1 votes

Un débutant a besoin d'aide pour la configuration de base de MVC Oauth Twitter

Je suis un développeur amateur et je bricole avec asp.net MVC. J'essaie de faire fonctionner l'Oauth de base via Twitter.

Tout ce que j'ai fait, c'est mettre un contrôleur nommé Twitter avec ce code : (il provient d'un exemple en ligne pour les webforms mais je l'ai légèrement modifié et mis dans 2 méthodes d'action, index et callback est-ce la bonne façon de le faire ?)

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using OAuthLibrary;

namespace mvcTwit.Controllers
    {
        public class TwitterController : Controller
        {
            private const string AccessUrl =     "http://twitter.com/oauth/access_token";

    private const string AuthorizeUrl =  "http://twitter.com/oauth/authorize?oauth_token={0}";

    private const string RequestUrl =    "http://twitter.com/oauth/request_token";

    //
    // GET: /Twitter/
    public ActionResult Index()
    {

        // add these to web.config
        var consumerKey =    ConfigurationManager.AppSettings["consumerKey"];
        var consumerSecret = ConfigurationManager.AppSettings["consumerSecret"];

        // look for an access token in the callback
        var requestToken = Request.QueryString["oauth_token"];

        if (requestToken == null)
        {
            requestToken = OAuth.GetRequestToken(RequestUrl,
                                                 consumerKey,
                                                 consumerSecret);
            var collection = HttpUtility.ParseQueryString(requestToken);
            var authorizeUrl = String.Format(AuthorizeUrl,
                                             collection[0]);

            Response.Redirect(authorizeUrl);
        }
        return View();
    }

    public ActionResult Callback(string oauth_token)
    {
        var consumerKey = ConfigurationManager.AppSettings["consumerKey"];
        var consumerSecret = ConfigurationManager.AppSettings["consumerSecret"];
        //var requestToken = Request.QueryString["oauth_token"];
        var requestToken = oauth_token;

        // oauth is complete and callback is returning 
        // the possibly authorized request token
        var collection = HttpUtility.ParseQueryString(requestToken);

        // obtain access token
        var accessToken = OAuth.GetAccessToken(AccessUrl,
                                               consumerKey,
                                               consumerSecret,
                                               collection[0],
                                               collection[1]);
        collection = HttpUtility.ParseQueryString(accessToken);

        // make a Twitter request with the access token and secret
        var url = "http://twitter.com/account/verify_credentials.xml";
        var verify = OAuth.GetProtectedResource(url,
                                                "GET",
                                                consumerKey,
                                                consumerSecret,
                                                collection[0],
                                                collection[1]);

        ViewData["oauth_token"] = verify;
        return View();
    }

}

}

Quand je vais sur mysite.com/Twitter, il fait son truc et m'emmène sur twitter.com/oauth/authorize?oauth_token=(longue chaîne ici)

Ensuite, après avoir rempli mes coordonnées, je suis renvoyé sur mon site : mysite.com/Twitter/callback?oauth_token=(longue chaîne)

mais l'erreur sur la page est :

L'index était hors de portée. Il doit être non négatif et inférieur à la taille de la collection. Nom du paramètre : index

Ma question est la suivante : la signature de l'action Callback est-elle correcte car elle attend un retour de chaîne de la part de Twitter ? Et évidemment, je dois ajouter une route dans mon fichier global.asax. A quoi ressemblerait cette route ? .. J'ai tout essayé et je n'arrive pas à le faire fonctionner. Est-ce la racine de mon problème ou est-ce que je fais une erreur de programmation ?

Ne soyez pas dur avec moi, je ne suis pas un expert, mais j'apprends au fur et à mesure.

Et, je teste ceci sur un site web, pas sur un serveur local.

Merci.

p.s. J'ai passé beaucoup trop de temps sur ce sujet et je cherche de l'aide en dernier recours, alors merci de votre gentillesse.

0voto

Dead account Points 8640

On dirait que var collection = HttpUtility.ParseQueryString(requestToken); ne vous renvoie pas deux résultats comme vous l'attendez ;

  var accessToken = OAuth.GetAccessToken(
        AccessUrl, consumerKey, consumerSecret,
        collection[0], collection[1]);   <<-- this line is your problem?

Je pense que vous devez diviser la collection[0] en deux parties de jeton Oauth.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X