在Google OAuth流中访问EF DbContext

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Google OAuth流中访问EF DbContext相关的知识,希望对你有一定的参考价值。

我在ASP.NET Core 2.1中有一个有效的Google身份验证流程。

我想通过在用户登录时检查用户的电子邮件地址来添加一些授权。如何在此处访问实体框架DbContext

public void ConfigureServices(IServiceCollection services)
{
  services
    .AddDbContext<Database>(options => options.UseSqlServer(Configuration["SqlServer"]));

  services
    .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(o =>
    {
      o.LoginPath = "/Auth/SignIn";
      o.LogoutPath = "/Auth/SignOut";
      o.ExpireTimeSpan = TimeSpan.FromDays(90);
    })
    .AddGoogle(o =>
    {
      o.ClientId = Configuration["Auth:Google:ClientId"];
      o.ClientSecret = Configuration["Auth:Google:ClientSecret"];
      o.Events = new OAuthEvents()
      {
        OnTicketReceived = async context =>
        {
          var email = context.Principal.Identity.GetEmail().ToLowerInvariant();
          if (/* User not in database */) // <-- How can I access the EF DbContext here?
          {
            context.Response.Redirect("/Auth/Unauthorised");
            context.HandleResponse();
          }
        }
      };
    });

  services.AddMvc();
  /* ... */
}
答案

您可以从上下文访问您的HttpContext,您可以从那里访问IServiceProvider

 context.HttpContext.RequestServices.GetService<Database>()

以上是关于在Google OAuth流中访问EF DbContext的主要内容,如果未能解决你的问题,请参考以下文章

在 OAuth 2.0 隐式流中验证​​ nonce 的位置?

在带有 PKCE 的 OAuth 授权流中使用时如何在 Azure 应用注册中启用 CORS?

如何在没有 Oauth 的情况下访问 Google 客户端 API(仅 API 密钥)

哪些 Google 应用脚本 API 需要 OAuth 访问令牌?

在 Spring Cloud Gateway 的 oauth2 客户端流中禁用重定向到 oauth2/authorization/registrationId

如何将 Google Services oAuth2 转换为 Google Ads API oAuth2 访问权限