私は、ajaxログイン要求を処理するApiControllerを持っています。以下のコードで何が起こっているかである。SignInManager.SignInPasswordAsyncがApiControllerのユーザーにログインしていません
// I tried with HttpContext.Current.GetOwinContext().Get... and it didn't work either
private ApplicationUserManager userManager => Request.GetOwinContext().Get<ApplicationManager>();
private ApplicationSignInManager signInManager => Request.GetOwinContext().Get<ApplicationSignInManager>();
public async Task<IHttpActionResult> Login(LoginJson request)
{
var user = await userManager.FindByEmailAsync(request.Email);
var result = await signInManager.PasswordSignInAsync(user.UserName, request.Password, true, true);
if (result == SignInStatus.Success)
{
if (!User.Identity.IsAuthenticated)
{
throw new Exception("Why are you not authenticating!!!");
}
}
return Ok();
}
その例外は常にスローされる(すなわち、結果は、ユーザーがまだ認証されていないことをSuccess
、まだIPrincipal
レポートです)。
何でも奇妙であることは、私はページをリロード場合、私はは、前の要求が実際にユーザーがログインした意味、ダッシュボードページ(ダッシュボードは、認証されたユーザのデフォルトのホームページです)に連れて行かだということである。しかし、その後、なぜUser.Identity.IsAuthenticated
は私の最初のログイン要求でfalseを返しますか?何か案は?
注:これはのみApiController
ために起こっている、通常のMVC Controller
は正しく
洞察力@trailmaxのおかげで、上記のコードの正確なコピーは、標準の 'Controller'でうまく動作します。これらの2つのタイプのコントローラにおける 'User'(' IPrincipal')オブジェクトの動作上の違いを知りましたか? –
それはMVCで動作するのは奇妙ですが、(私にとっては決してしなかった)ものではありません。 MVC5のAPIコントローラはMVCコントローラとはかなり異なるので、APIであるときにOWINミドルウェアで異なる動作があると思われます。正直言って、私はOWIN-APIの相互運用性を検討していません。 – trailmax
ちょっと@trailmax、多くのありがとう。私はあなたのコメントを読んだ後好奇心を得、私のMVCコントローラをもう一度見て、私が認証チェックを行っていた別のコントローラアクションにユーザーをリダイレクトしていることに気づいた。リダイレクトを行っているときにCookieが設定されているようです。私を助けてくれてありがとう! :) –