Facebook を使用してユーザーを事前認証しているため、ユーザーがページにアクセスすると、ajax 関数が呼び出されてユーザーがログインし、サーバーはユーザーがサイトに対して既に認証されているかどうかも確認します。これらのユーザーは、サーバー上のユーザー データベースにエントリを持っています。
サーバー側のコードは次のとおりで、ajax によって呼び出されます。その後、データベースに保存されているユーザーに関する詳細情報を取得するために使用する 2 番目の方法です。
同じコントローラーの 2 番目のメソッドで User.Identity.IsAuthticaed を呼び出すと、ユーザー オブジェクトはまだ null です。User オブジェクトには、以下の FBReg のすべての情報が含まれています。
編集: さらにトラブルシューティングを行った後、 getUserInfo() を呼び出す ActionResult に User オブジェクトが設定されていることがわかりました。したがって、getUserInfo() のユーザーが null である理由がわかりません。その場合、オブジェクトを渡すだけでよいと思いますが、なぜこれが起こるのかまだ興味があります。
[HttpPost]
public String FBReg(FBInfo userinfo)
{
..
..
..
if (!User.Identity.IsAuthenticated)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(userinfo.id, "FBPassword"))
{
FormsAuthentication.SetAuthCookie(userinfo.id, true);
var result = (from u in db.users where (u.username == userinfo.id) select u).FirstOrDefault();
result.LastLoginDate = DateTime.Now;
db.SaveChanges();
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
..
..
..
return "";
}
public UserRepository getUserInfo()
{
bool isauth = false;
try
{
if (User.Identity.IsAuthenticated) // User is always null even after FBReg has User as Authnticated with all the correct information
{
isauth = User.Identity.IsAuthenticated;
}
}
catch { }
// get user info from database to display on page
..
..
..
return userInfo;
}