ログインしているユーザーだけが/ api/prenews(たとえば)にアクセスできる必要があるため、ユーザーがログインしているときは、彼を覚えておく必要があります。これが私のやり方です。Web API:ユーザーに正しくサインインするにはどうすればいいですか?
public class PrenewsController : ApiController
{
/*
...
*/
public IHttpActionResult GetPrenews()
{
string currentUser = HttpContext.Current.GetOwinContext().Authentication.User.Claims.FirstOrDefault(k => k.Type == "username").Value;
if(currentUser!=null)//the user is logged in
{/*...*/}
else //the user is not logged in
{/*...*/}
}
}
しかしHttpContext.Current.GetOwinContext().Authentication.User.Claims.FirstOrDefault(k => k.Type == "username")
常にnullである:(。userNameの変数は、ログインが成功した場合は、現在のユーザー名を格納する文字列です)
IList<Claim> claimCollection = new List<Claim>
{
new Claim("username",userName)
};
ClaimsIdentity claimsIdentity = new ClaimsIdentity(claimCollection);
HttpContext.Current.GetOwinContext().Authentication.SignIn(new AuthenticationProperties { IsPersistent = false }, claimsIdentity);
私はこのようなPrenewsController.csを実装しました。私は間違って何をしていますか?
なぜユーザー名を申し立てに保存しますか?ログインしたユーザーのユーザー名を取得するには、より良い方法があります。 –
HttpContext.Current.GetOwinContext()。Authentication.SignInにはClaimsIdentity []の2番目のパラメータが必要です。 – Supercat