Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 尝试在ASP.NET Core 3.1中通过google进行身份验证时出错未注册任何身份验证处理程序_Asp.net Core_Authentication_External - Fatal编程技术网

Asp.net core 尝试在ASP.NET Core 3.1中通过google进行身份验证时出错未注册任何身份验证处理程序

Asp.net core 尝试在ASP.NET Core 3.1中通过google进行身份验证时出错未注册任何身份验证处理程序,asp.net-core,authentication,external,Asp.net Core,Authentication,External,错误 这是我的创业课 public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services)

错误

这是我的创业课

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        // Demand authentication in the whole application
        services.AddControllersWithViews(o => o.Filters.Add(new AuthorizeFilter()));

        services.AddScoped<IConferenceRepository, ConferenceRepository>();
        services.AddScoped<IProposalRepository, ProposalRepository>();
        services.AddScoped<IAttendeeRepository, AttendeeRepository>();
        services.AddScoped<IUserRepository, UserRepository>();

        services.AddDbContext<ConfArchDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
                assembly => 
                   assembly.MigrationsAssembly(typeof(ConfArchDbContext).Assembly.FullName)));

        services
           .AddAuthentication(options =>
           {
               options.DefaultScheme = 
                    CookieAuthenticationDefaults.AuthenticationScheme;
               options.DefaultChallengeScheme = 
             GoogleDefaults.AuthenticationScheme;
           })
           .AddCookie(options =>
           {
               options.Cookie.IsEssential = true;
               //options.Cookie.SameSite = SameSiteMode.None;
           })
           .AddGoogle(options =>
           {                   
               options.SignInScheme = 
               CookieAuthenticationDefaults.AuthenticationScheme;
               options.ClientId = 
                Configuration["Authentication:Google:ClientId"];
               options.ClientSecret = 
              Configuration["Authentication:Google:ClientSecret"];
           });
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        //app.UseIdentity();
        // app.UseAuthentication();           

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseCookiePolicy();

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {                   
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Conference}/{action=Index}/{id?}");
        });
    }
}

我找到了答案,配置服务代码中的应该是:

// Demand authentication in the whole application
services.AddControllersWithViews(o => o.Filters.Add(new 
AuthorizeFilter()));

services.AddScoped<IConferenceRepository, ConferenceRepository>();
services.AddScoped<IProposalRepository, ProposalRepository>();
services.AddScoped<IAttendeeRepository, AttendeeRepository>();
services.AddScoped<IUserRepository, UserRepository>();

services.AddDbContext<ConfArchDbContext>(options =>


 options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
        assembly => 
 assembly.MigrationsAssembly(typeof(ConfArchDbContext).Assembly.FullName)));

services.AddAuthentication(o => {
    o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    //o.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
.AddCookie()
.AddCookie(ExternalAuthenticationDefaults.AuthenticationScheme)
.AddGoogle(o =>
{   // ClienteId and Secret to authenticate the user from Google          
    o.SignInScheme = 
        ExternalAuthenticationDefaults.AuthenticationScheme;
    o.ClientId = Configuration["Authentication:Google:ClientId"];
    o.ClientSecret = 
       Configuration["Authentication:Google:ClientSecret"];
});
//在整个应用程序中要求身份验证
services.addcontrollerswithview(o=>o.Filters.Add(新
授权过滤器());
services.addScope();
services.addScope();
services.addScope();
services.addScope();
services.AddDbContext(选项=>
options.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”),
汇编=>
assembly.migrationassembly(typeof(ConfArchDbContext.assembly.FullName));
services.AddAuthentication(o=>{
o、 DefaultScheme=CookieAuthenticationDefaults.AuthenticationScheme;
//o、 DefaultChallengeScheme=GoogleDefaults.AuthenticationScheme;
})
.AddCookie()
.AddCookie(ExternalAuthenticationDefaults.AuthenticationScheme)
.AddGoogle(o=>
{//clientId和Secret用于从Google验证用户
o、 符号主题=
ExternalAuthenticationDefaults.AuthenticationScheme;
o、 ClientId=Configuration[“Authentication:Google:ClientId”];
o、 客户机密=
配置[“身份验证:Google:ClientSecret”];
});

我找到了答案,配置服务代码中的应该是:

// Demand authentication in the whole application
services.AddControllersWithViews(o => o.Filters.Add(new 
AuthorizeFilter()));

services.AddScoped<IConferenceRepository, ConferenceRepository>();
services.AddScoped<IProposalRepository, ProposalRepository>();
services.AddScoped<IAttendeeRepository, AttendeeRepository>();
services.AddScoped<IUserRepository, UserRepository>();

services.AddDbContext<ConfArchDbContext>(options =>


 options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
        assembly => 
 assembly.MigrationsAssembly(typeof(ConfArchDbContext).Assembly.FullName)));

services.AddAuthentication(o => {
    o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    //o.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
.AddCookie()
.AddCookie(ExternalAuthenticationDefaults.AuthenticationScheme)
.AddGoogle(o =>
{   // ClienteId and Secret to authenticate the user from Google          
    o.SignInScheme = 
        ExternalAuthenticationDefaults.AuthenticationScheme;
    o.ClientId = Configuration["Authentication:Google:ClientId"];
    o.ClientSecret = 
       Configuration["Authentication:Google:ClientSecret"];
});
//在整个应用程序中要求身份验证
services.addcontrollerswithview(o=>o.Filters.Add(新
授权过滤器());
services.addScope();
services.addScope();
services.addScope();
services.addScope();
services.AddDbContext(选项=>
options.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”),
汇编=>
assembly.migrationassembly(typeof(ConfArchDbContext.assembly.FullName));
services.AddAuthentication(o=>{
o、 DefaultScheme=CookieAuthenticationDefaults.AuthenticationScheme;
//o、 DefaultChallengeScheme=GoogleDefaults.AuthenticationScheme;
})
.AddCookie()
.AddCookie(ExternalAuthenticationDefaults.AuthenticationScheme)
.AddGoogle(o=>
{//clientId和Secret用于从Google验证用户
o、 符号主题=
ExternalAuthenticationDefaults.AuthenticationScheme;
o、 ClientId=Configuration[“Authentication:Google:ClientId”];
o、 客户机密=
配置[“身份验证:Google:ClientSecret”];
});