2014-11-23 1 views
3

Стараюсь этот код: https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#web_applicationsИзменение Google по умолчанию Auth Перенаправление - C# (Google liblary)

мой код же

Но! Мне нужно изменить это перенаправление URL по умолчанию. Сейчас: redirect_uri = http:% 2F% 2Flocalhost: 52674% 2FAuthCallback% 2FIndexAsync

Как я могу изменить этот URL? Ребята, пожалуйста, помогите.

Спасибо

ответ

5

Вы можете наследовать форму FlowMetadata и переопределить свойство AuthCallback. Посмотрите в следующей ссылке:

https://code.google.com/p/google-api-dotnet-client/source/browse/Src/GoogleApis.Auth.Mvc4/OAuth2/Mvc/FlowMetadata.cs?r=eb702f917c0e18fc960d077af132d0d83bcd6a88#49

НО, Вы сможете изменить относительный URL, но не абсолютным.

Если вы хотите использовать совершенно другой URL, вам нужно будет сделать, создать свой собственный AuthorizationCodeMvcApp и изменить его конструктор следующим:

public MyNewAuthorizationCodeMvcApp(Controller controller, FlowMetadata flowData) 
     : base(
     flowData.Flow, 
     < YOUR URL HERE >, 
     controller.Request.Url.ToString()) 
    { 
     this.controller = controller; 
     this.flowData = flowData; 
    } 

Затем вы можете подключить его к потоку, вместо default AuthorizationCodeMvcApp (стандартная реализация библиотеки).

+0

Спасибо за ответ. Я пытаюсь, но имею новую ошибку)) Я пробую написать здесь, но но модератор сказал, что мне нужно открыть новый вопрос. Ссылка на мои новые ошибки^http://stackoverflow.com/questions/27104306/change-redirect-url-in-google-drive-c-sharp-part-2 –

5

Мне также было очень сложно сначала сменить Googles OAuth 2.0 redirect uri, но оказалось, что это довольно просто. Вы можете сделать это по-разному. Если вы следуете руководству Googles для веб-приложений OAuth 2.0 (ASP.NET MVC), самый простой выбор - переопределить строку AuthCallback в вашем классе AppFlowMetadata.

https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth

public override string AuthCallback 
{ 
    get { return @"/AuthCallback/Index"; } 
} 

Вы также можете реализовать свою собственную версию "AuthorizationCodeMvcApp", но это совершенно излишним. Не переходите поток, чтобы получить воду. :)

https://github.com/google/google-api-dotnet-client/tree/master/Src/GoogleApis.Auth.Mvc4/OAuth2/Mvc

Но если вы хотите сделать это, вот пример:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System; 
using System.Threading; 
using System.Threading.Tasks; 
using System.Web.Mvc; 
using Google.Apis.Auth.OAuth2.Mvc; 
using Google.Apis.Auth.OAuth2.Web; 

namespace ProjectName.GoogleCalendar 
{ 
     /// <summary> 
     /// Thread-safe OAuth 2.0 authorization code flow for a MVC web application that persists end-user credentials. 
     /// </summary> 
     public class CustomAuthorizationCodeMvcApp : AuthorizationCodeWebApp 
     { 

      private readonly Controller controller; 
      private readonly FlowMetadata flowData; 

      /// <summary>Gets the controller which is the owner of this authorization code MVC app instance.</summary> 
      public Controller Controller { get { return controller; } } 

      /// <summary>Gets the <see cref="Google.Apis.Auth.OAuth2.Mvc.FlowMetadata"/> object.</summary> 
      public FlowMetadata FlowData { get { return flowData; } } 

      /// <summary>Constructs a new authorization code MVC app using the given controller and flow data.</summary> 
      public CustomAuthorizationCodeMvcApp(Controller controller, FlowMetadata flowData) 
       : base(
       flowData.Flow, 
       new Uri(controller.Request.Url.GetLeftPart(UriPartial.Authority) + "/CustomController" + flowData.AuthCallback).ToString(), 
       controller.Request.Url.ToString()) 
      { 
       this.controller = controller; 
       this.flowData = flowData; 
      } 

      /// <summary> 
      /// Asynchronously authorizes the installed application to access user's protected data. It gets the user 
      /// identifier by calling to <see cref="Google.Apis.Auth.OAuth2.Mvc.FlowMetadata.GetUserId"/> and then calls to 
      /// <see cref="Google.Apis.Auth.OAuth2.AuthorizationCodeWebApp.AuthorizeAsync"/>. 
      /// </summary> 
      /// <param name="taskCancellationToken">Cancellation token to cancel an operation</param> 
      /// <returns> 
      /// Auth result object which contains the user's credential or redirect URI for the authorization server 
      /// </returns> 
      public Task<AuthResult> AuthorizeAsync(CancellationToken taskCancellationToken) 
      { 
       return base.AuthorizeAsync(FlowData.GetUserId(Controller), taskCancellationToken); 
      } 
     } 
    } 
+0

Это самый простой подход и очень полезно. – Dhanuka777

 Смежные вопросы

  • Нет связанных вопросов^_^