MVC Реализация OAuthConsumer в DotNetOpenAuth специально для адресной книги Google - PullRequest
2 голосов
/ 23 августа 2011

В последние 2 дня я искал в сети реализацию MVC OAuthConsumer Sample в DotNetOpenAuth, но все же я не нашел никакого решения. Я также пытался преобразовать реализацию OAuthConsumer из WebForms в MVC, но все еще не смог правильно ее реализовать. Может кто-нибудь, пожалуйста, помогите, сославшись на какое-то место, чтобы найти образец конвертера.

Ответы [ 2 ]

1 голос
/ 25 августа 2011

После 2 дней борьбы я решил проблему следующим образом, но я думаю, что она требует дальнейшего улучшения.

private string AccessToken
{
    get { return (string)Session["GoogleAccessToken"]; }
    set { Session["GoogleAccessToken"] = value; }
}

private InMemoryTokenManager TokenManager
{
    get
    {
        var tokenManager = (InMemoryTokenManager)HttpContext.Application["GoogleTokenManager"];
        if (tokenManager == null)
        {
            string consumerKey = ConfigurationManager.AppSettings["GoogleOAuthConsumerKey"];
            string consumerSecret = ConfigurationManager.AppSettings["GoogleOAuthConsumerValue"];
            if (!string.IsNullOrEmpty(consumerKey))
            {
                tokenManager = new InMemoryTokenManager(consumerKey, consumerSecret);
                HttpContext.Application["GoogleTokenManager"] = tokenManager;
            }
        }

        return tokenManager;
    }
}


public ActionResult GoogleSync()
{
    var google = new WebConsumer(GoogleConsumer.ServiceDescription, this.TokenManager);

    // Is Google calling back with authorization?
    var accessTokenResponse = google.ProcessUserAuthorization();
    if (accessTokenResponse != null)
    {
        this.AccessToken = accessTokenResponse.AccessToken;
        XDocument contactsDocument = GoogleConsumer.GetContacts(google, this.AccessToken, 5, 1);
        var contactList = new List<GMailContact>();
        foreach (var entry in contactsDocument.Root.Elements(XName.Get("entry", "http://www.w3.org/2005/Atom")))
        {
            GMailContact newContact = new GMailContact { Name = string.Empty, Email = string.Empty };
            var titleElement = entry.Element(XName.Get("title", "http://www.w3.org/2005/Atom"));
            if (titleElement != null)
                newContact.Name = titleElement.Value;
            var emailElement = entry.Element(XName.Get("email", "http://schemas.google.com/g/2005"));
            if (emailElement != null && emailElement.Attribute("address") != null)
            {
                newContact.Email = emailElement.Attribute("address").Value;
            }

            contactList.Add(newContact);
        }

        ////var contacts = from entry in contactsDocument.Root.Elements(XName.Get("entry", "http://www.w3.org/2005/Atom"))
        ////               select new { Name = entry.Element(XName.Get("title", "http://www.w3.org/2005/Atom")).Value,
        ////                            Email = (XName.Get("email", "http://schemas.google.com/g/2005") == null ? "" : entry.Element(XName.Get("email", "http://schemas.google.com/g/2005")).Attribute("address").Value) };

        return View(contactList);
    }
    else if (this.AccessToken == null)
    {
        // If we don't yet have access, immediately request it.
        GoogleConsumer.RequestAuthorization(google, GoogleConsumer.Applications.Contacts);

        return this.Content("");
    }
    else
    {

        return this.Content("synchronization failed.");
    }

}
0 голосов
/ 24 августа 2011

Нет ни одного образца MVC OAuth Consumer, о котором я знаю. Но поскольку потребитель OAuth на самом деле не имеет ничего общего со структурой представления, он не должен отличаться между веб-формами и MVC. Вы должны иметь возможность просто извлечь код, связанный с потребителем, непосредственно из примера веб-форм и заставить его работать в MVC.

Если это не сработает, пожалуйста, добавьте больше вопросов, которые объясняют проблемы, с которыми вы сталкиваетесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...