지난 몇 주 동안이 문제를 반복적으로 처리하고 있지만 이제는 문제를 해결해야합니다. 문제는 해결할 수없는 것 같습니다.Nancy.Authentication.Forms에 로그인이 기억되지 않습니까?
간단히 말해서 : 나는 폼 인증을 사용하는 nancy 앱이 있습니다. 모든 작품 괜찮아 세션이 애플 리케이션 재시작 사이에 지속되지 않습니다 기대, 그래서 보인다. 폼 인증은 기본적으로 쿠키를 사용하기 때문에 이렇게해야합니다. 당신들은이 행동을 일으킬 수있는 어떤 생각이 있습니까?
Bootstrapper.cs :
protected override void RequestStartup(TinyIoCContainer container, IPipelines pipelines, NancyContext context)
{
base.RequestStartup(container, pipelines, context);
var formsAuthConfiguration = new FormsAuthenticationConfiguration()
{
RedirectUrl = "~/user/login",
UserMapper = container.Resolve<IUserMapper>()
};
FormsAuthentication.Enable(pipelines, formsAuthConfiguration);
}
앱 시작에 : 여기 내 코드는
protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
{
base.ApplicationStartup(container, pipelines);
Nancy.Session.CookieBasedSessions.Enable(pipelines);
//Nancy.Session.MemoryCacheBasedSessions.Enable(pipelines); <-- disabled just to be sure
Nancy.Json.JsonSettings.RetainCasing = true;
Nancy.Json.JsonSettings.MaxJsonLength = Int32.MaxValue;
StaticConfiguration.DisableErrorTraces = false;
Elmahlogging.Enable(pipelines, "elmah");
//Some background job initialization...
}
로그인/POST 요청 처리 HET 모듈 경로 :
Post["/login"] = parameters =>
{
VerifyUserViewModel userLoginData = this.Bind();
var verified = userManager.VerifyAccount(userLoginData.Email, userLoginData.Password);
userLoginData.LoginFailed = false;
if (verified == false)
{
userLoginData.LoginFailed = true;
return View["SignIn", userLoginData];
}
else
{
var user = userManager.GetByEmail((string)Request.Form.Email);
DateTime? expiry = null;
if (this.Request.Form.RememberMe.HasValue)
{
expiry = DateTime.Now.AddDays(30);
}
return this.LoginAndRedirect(user.Guid, expiry, "/dash");
}
};
을
마지막으로, IUserMapper 구현 :
public class UserDatabase : IUserMapper
{
private readonly IUserManager _userManager;
public UserDatabase(IUserManager userManager)
{
_userManager = userManager;
}
public Nancy.Security.IUserIdentity GetUserFromIdentifier(Guid identifier, Nancy.NancyContext context)
{
var user = (ReflectUser)_userManager.GetByGuid(identifier);
var identity = new ReflectWebUser();
identity.Map(user);
return identity;
}
}
여러분은 세션 지속성을 저해 할 수있는 내 코드가 이상하다는 것을 알 수 있습니까?
또한이 응용 프로그램에서는 토큰 기반 인증을 사용하고 있지만 테스트를 위해 완전히 비활성화되었습니다. 또한 토큰 인증을 구현하기 전에이 문제가있었습니다.
감사합니다.
이 페이지 하단의 해결책은 https://github.com/NancyFx/Nancy/wiki/Forms-Authentication을 찾으십시오. – Corstiaan