重定向太多-使用Facebook Asp.Net进行外部登录
我正在创建一个web api,在这里我需要让人们使用Facebook登录 我跟在后面 一旦我向Facebook提供了我的凭据,它应该重定向到某个操作,但它会说:“重定向太多了。” 这是我在Startup.cs中得到的: 这是我的FacebookAuthProvider:类: 我非常好奇的一件事是,如果我取消注释这行:重定向太多-使用Facebook Asp.Net进行外部登录,asp.net,facebook,asp.net-web-api,owin,Asp.net,Facebook,Asp.net Web Api,Owin,我正在创建一个web api,在这里我需要让人们使用Facebook登录 我跟在后面 一旦我向Facebook提供了我的凭据,它应该重定向到某个操作,但它会说:“重定向太多了。” 这是我在Startup.cs中得到的: 这是我的FacebookAuthProvider:类: 我非常好奇的一件事是,如果我取消注释这行: [Route("ExternalLogin", Name = "ExternalLogin")] 并尝试使用该新路由访问该控制器,它表示User(GetExternalLogi
[Route("ExternalLogin", Name = "ExternalLogin")]
并尝试使用该新路由访问该控制器,它表示User
(GetExternalLogin的if中的一个)为null
这是我用来测试的链接:
http://localhost:62887/api/ExternalAuth/GetExternalLogin?provider=Facebook&redirect_uri=http://localhost:62887/api/ExternalAuth/LoggedIn
用户成功登录后,应重定向以下操作:
[HttpGet]
public IHttpActionResult LoggedIn()
{
return Ok(new { Message = "You've been successfully logged in! :)" });
}
我要自杀了,我终于成功了。我刚刚不得不将NuGet软件包从2.1更新到3.1…>:/ 我要自杀了,我终于成功了。我刚刚不得不将NuGet软件包从2.1更新到3.1…>:/ 嘿,你还活着吗是的,怎么了?嘿,你还活着吗是的,怎么了?
public class ChallengeResult : IHttpActionResult
{
public string LoginProvider { get; set; }
public HttpRequestMessage Request { get; set; }
public ChallengeResult(string loginProvider, ApiController controller)
{
LoginProvider = loginProvider;
Request = controller.Request;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
Request.GetOwinContext().Authentication.Challenge(LoginProvider);
HttpResponseMessage response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
response.RequestMessage = Request;
return Task.FromResult<HttpResponseMessage>(response);
}
}
[HttpGet]
[OverrideAuthentication]
[HostAuthentication(DefaultAuthenticationTypes.ExternalCookie)]
[AllowAnonymous]
//[Route("ExternalLogin", Name = "ExternalLogin")]
public IHttpActionResult GetExternalLogin(string provider)
{
string redirectUri = string.Empty;
AppUserManager manager = new AppUserManager(new AppUserStore(new AppContext()));
if (!User.Identity.IsAuthenticated)
{
return new ChallengeResult(provider, this);
}
ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);
UserLoginInfo loginInfo = new UserLoginInfo(externalLogin.LoginProvider, externalLogin.ProviderKey);
IdentityUser user = manager.Find(loginInfo);
bool hasRegistered = user != null;
ValidateRedirectUri(this.Request, ref redirectUri);
redirectUri = String.Format("{0}#external_access_token={1}&provider={2}&haslocalaccount={3}&external_user_name={4}",
redirectUri,
externalLogin.AccessToken,
externalLogin.LoginProvider,
hasRegistered.ToString(),
externalLogin.UserName);
return Redirect(redirectUri);
}
[Route("ExternalLogin", Name = "ExternalLogin")]
[HttpGet]
public IHttpActionResult LoggedIn()
{
return Ok(new { Message = "You've been successfully logged in! :)" });
}