【问题标题】:How to update users Gmail signature如何更新用户的 Gmail 签名
【发布时间】:2018-07-03 09:58:31
【问题描述】:

我正在使用带有 Google 身份验证的 ASP .Net Core 2。我需要更新电子邮件签名 (gmail)。但我不知道如何获取 Google 凭据(身份验证后)。

我的 url 端口有问题,一直生成另一个端口 - 例如:localhost:4550,另一次是 localhost:3568(因为那样,我无法在 Google Console 中解锁正确的 url)。我试过这个:stackoverflow.com/questions/31209273/… 但在我的服务器中,当我点击按钮时,不要打开弹出窗口,

services.AddAuthentication().AddGoogle(googleOptions =>
            {
                googleOptions.ClientId = googleClientId;
                googleOptions.ClientSecret = googleClientSecret;
            });

我也在尝试这个代码:

        UserCredential cred = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                              new ClientSecrets
                              {
                                  ClientId = _applicationSettings.GoogleClientId,
                                  ClientSecret = _applicationSettings.GoogleClientSecret
                              },
                              scopes,
                              "me",
                              CancellationToken.None,
                              new FileDataStore("Analytics.Auth.Store"));

但我还有另一个问题,这段代码不起作用。有人知道我该如何实现这个?谢谢。

【问题讨论】:

  • 我的 url 端口有问题,一直生成另一个端口 - 例如:localhost:4550,另一个时间 localhost:3568(我无法在 Google Console 中解锁正确的 url,因为那个) .我试过这个:stackoverflow.com/questions/31209273/… 但在我的服务器中,当我点击按钮时,不要打开弹出窗口,
  • 然后更新你的问题,也许改变话题。想要一个固定的端口号与问题标题所述的不同
  • @Tseng 我可以用这个代码做到这一点:stackoverflow.com/questions/31209273/… 但是这个代码不起作用。在 localhost 页面没有收到认证确认(等待了这么多时间),并且在服务器中没有打开窗口。
  • @stuartd 我已经编辑了他的问题,希望您现在更清楚。
  • @DaImTo 谢谢。

标签: c# google-api gmail-api asp.net-core-2.0 google-api-dotnet-client


【解决方案1】:

Google .net 客户端库目前不支持使用 Asp .Net 核心进行身份验证。您正在使用的代码

UserCredential cred = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                          new ClientSecrets
                          {
                              ClientId = _applicationSettings.GoogleClientId,
                              ClientSecret = _applicationSettings.GoogleClientSecret
                          },
                          scopes,
                          "me",
                          CancellationToken.None,
                          new FileDataStore("Analytics.Auth.Store"));

用于验证已安装的应用程序,例如在运行代码的机器上打开浏览器窗口的控制台应用程序。对于 Web 应用程序,身份验证需要在客户端计算机上打开浏览器身份验证窗口。目前无法使用 .Net 客户端库执行此操作。

请参阅问题93311091151

【讨论】:

  • 如何在 aspcore 上获得“result.Credential”?
  • var service = new GmailService(new BaseClientService.Initializer { HttpClientInitializer = result.Credential, ApplicationName = "ASP.NET MVC Sample" });
  • 是的,此代码适用于 Asp.net MVC,我使用的是 Aspcore 2。我在这里尝试,但不支持 Google.Apis.Auth.Mvc 和 System.Web.Mvc。
  • 我将其添加为问题,看看发生了什么github.com/google/google-api-dotnet-client/issues/1151
  • 感谢您的帮助@DalmTo 我正在使用 GoogleAuthorizationCodeFlow,但 AspCore 在此代码之后不支持: var result = await new AuthorizationCodeMvcApp(this, new AppFlowMetadata()).AuthorizeAsync(cancellationToken);
【解决方案2】:

“Google .net 客户端库目前不支持 Asp .net Core。”

然后,我使用 Google 服务的 aspcore 身份验证,以及一些权限:

        services.AddAuthentication(options =>
        {
            options.DefaultScheme = IdentityConstants.ApplicationScheme;
        })
        .AddGoogle("Google", options =>
        {
            options.AccessType = "offline";
            options.ClientId = googleClientId;
            options.ClientSecret = googleClientSecret;
            options.SaveTokens = true;
            options.Scope.Add(GmailService.Scope.MailGoogleCom);
            options.Scope.Add(GmailService.Scope.GmailSettingsBasic);
        });

在我的控制器中,我正在获取令牌以进行 REST 并更新签名:

   var user = await _userManager.GetUserAsync(User);
   var externalAccessToken = await _userManager.GetAuthenticationTokenAsync(user, "Google", "access_token");

REST 格式:

PUT https://www.googleapis.com/gmail/v1/users/me/settings/sendAs/ + "useremaillogged"

Header Authorization Bearer“你的令牌”

Json 对象

{ "签名":"你的签名" }

【讨论】:

    猜你喜欢
    • 2019-05-14
    • 2017-03-03
    • 1970-01-01
    • 2022-08-09
    • 2017-09-09
    • 2016-11-10
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    相关资源
    最近更新 更多