我在不使用Identity的情况下在ASP.NET Core 2.0应用程序中设置社交登录。
我只想通过Facebook,Google和LinkedIn对用户进行身份验证并接收他们的信息。我自己处理用户信息。
这是我到目前为止所做的,它给了我以下错误:
没有配置身份验证处理程序来处理该方案:facebook
这是Startup.cs文件的更改:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
// Added these lines for cookie and Facebook authentication
services.AddAuthentication("MyCookieAuthenticationScheme")
.AddCookie(options => {
options.AccessDeniedPath = "/Account/Forbidden/";
options.LoginPath = "/Account/Login/";
})
.AddFacebook(facebookOptions =>
{
facebookOptions.AppId = "1234567890";
facebookOptions.AppSecret = "1234567890";
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
// Added this line
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
然后我有这个动作方法,我发送给用户以确定我们用于认证的提供者,例如Facebook,谷歌等。此代码来自我的ASP.NET Core 1.1应用程序,它运行正常。
[AllowAnonymous]
public async Task ExternalLogin(string provider, string returnUrl)
{
var properties = new AuthenticationProperties
{
RedirectUri = "Login/Callback"
};
// Add returnUrl to properties -- if applicable
if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
properties.Items.Add("returnUrl", returnUrl);
// The ASP.NET Core 1.1 version of this line was
// await HttpContext.Authentication.ChallengeAsync(provider, properties);
await HttpContext.ChallengeAsync(provider, properties);
return;
}
当我点击ChallangeAsync
行时收到错误消息。
我做错了什么?
答案 0 :(得分:1)
没有配置身份验证处理程序来处理该方案:facebook
方案名称区分大小写。使用provider=Facebook
代替provider=facebook
,它应该有效。