3

Я запускаю RC1 ASP.NET MVC 6 и хотел бы использовать Provider Identity от MongoDB.Asp.Net MVC 6 Identity 3 MongoDB External Login (Facebook)

Я внедрили provider Грант Меграбян, который делает большую работу по регистрации новых пользователей и позволяет им войти, но я получаю ошибку:

InvalidOperationException: No authentication handler is configured to handle the scheme: Microsoft.AspNet.Identity.External Microsoft.AspNet.Http.Authentication.Internal.DefaultAuthenticationManager.d__13.MoveNext()

Я имел внешний Войти ранее работавшие с использованием EntityFramework поэтому я предполагаю, что моя конфигурация для стороннего авторизации, вероятно, правильная.

При регистрации в системе пользователь щелкает с Facebook они перенаправляются к следующему действию:

// POST: /Account/ExternalLogin 
    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public IActionResult ExternalLogin(string provider, string returnUrl = null) 
    { 
     // Request a redirect to the external login provider. 
     var redirectUrl = Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl }); 
     var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl); 
     return new ChallengeResult(provider, properties); 
    } 

Там не исключение брошено в этот момент, однако, когда Facebook возвращается из ChallengeResponse он посылает GET для: http://localhost:51265/signin-facebook?code=[facebook пользователя маркер].

На данный момент ASP.NET бросает исключение:

enter image description here

Обработчик URL сделанные Facebook, кажется, не имеет смысла. Неужели он должен вернуться к моему действию ExternalLoginCallback?

Это о том, что у меня нет идей ?!

Если кто-нибудь может увидеть, где я поступил неправильно, я был бы очень счастливым парнем.

Мои startup.cs:

public class Startup 
{ 
    public Startup(IHostingEnvironment env) 
    { 
     // Set up configuration sources. 
     var builder = new ConfigurationBuilder() 
      .AddJsonFile("appsettings.json") 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); 

     if (env.IsDevelopment()) 
     { 
      // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709 
      builder.AddUserSecrets(); 
     } 

     builder.AddEnvironmentVariables(); 
     Configuration = builder.Build(); 
    } 

    public IConfigurationRoot Configuration { get; set; } 

    // This method gets called by the runtime. Use this method to add services to the container. 
    public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddSingleton<ApplicationDbContext>(); 

     // Add framework services. 
     services.AddIdentity<ApplicationUser, IdentityRole>() 
      .AddMongoStores<ApplicationDbContext, ApplicationUser, IdentityRole>() 
      .AddDefaultTokenProviders(); 

     services.AddMvc(); 

     // Add application services. 
     services.AddTransient<IEmailSender, AuthMessageSender>(); 
     services.AddTransient<ISmsSender, AuthMessageSender>(); 
    } 

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
     loggerFactory.AddDebug(); 

     if (env.IsDevelopment()) 
     { 
      app.UseBrowserLink(); 
      app.UseDeveloperExceptionPage(); 
      app.UseDatabaseErrorPage(); 
     } 
     else 
     { 
      app.UseExceptionHandler("/Home/Error"); 
     } 

     app.UseIISPlatformHandler(options => options.AuthenticationDescriptions.Clear()); 

     app.UseStaticFiles(); 

     app.UseFacebookAuthentication(options => 
     { 
      options.AppId = "removed"; 
      options.AppSecret = "removed"; 
     }); 

     app.UseIdentity(); 

     app.UseMvcWithDefaultRoute(); 
    } 

    // Entry point for the application. 
    public static void Main(string[] args) => WebApplication.Run<Startup>(args); 
} 
+0

Не могли бы вы разместить свой startup.cs? Или проверьте сами: как вы настроили аутентификацию Facebook там? – vzayko

+0

Спасибо, что посмотрели, добавил startup.cs. @vzayko – GavKilbride

ответ

5

Звонок UseFacebookAuthentication после UseIdentity, но до UseMvc;

app.UseIdentity(); 

app.UseFacebookAuthentication(options => 
{ 
    options.AppId = "removed"; 
    options.AppSecret = "removed"; 
}); 

app.UseMvcWithDefaultRoute(); 
+0

Я также наполнил свой контроллер учетных записей после реорганизации структуры сущности. Спасибо за помощь. – GavKilbride

-1

// это, как вы делаете это

app.UseFacebookAuthentication(options => 
    { 
     options.AppId = "removed"; 
     options.AppSecret = "removed"; 
    }); 

    app.UseIdentity(); 

    app.UseMvcWithDefaultRoute(); 

// это как должно быть

app.UseIdentity(); 

app.UseMvcWithDefaultRoute(); 

app.UseFacebookAuthentication(options => 
    { 
     options.AppId = "removed"; 
     options.AppSecret = "removed"; 
    }); 

// Шаги определения конфигураций: очень важно. Вы не должны бросать // ничего где. вам нужно добавить Identity, а затем аутентификацию Facebook. // Это все, что я могу сказать из того, что я вижу здесь, надеюсь, что он решает вашу проблему.

+1

Хотя заказ важен, ваш заказ будет означать, что аутентификация Facebook будет настроена после настройки Identity. Конфигурация Facebook Auth затем игнорируется. – GavKilbride

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