T
Tim_Mac
hi,
i've read a lot of posts here about people who ran into problems using
forms authentication, and the RedirectFromLoginPage() method, which
always redirects to a default.aspx. this is a big problem if you use
sub-folders that don't have a default.aspx page, as in my case.
i read some posts that suggested manually Response.Redirecting the user
to the url in the querystring, but actually this is incorrect because
Forms Auth puts the default.aspx in that querystring even if the user
wasn't at a page called default.aspx.
i put together a simple solution to get the redirecting to work
properly, and would like to post it here for future reference:
1. the Login page (Login.aspx) must be set up to read the
HTTP_Referrer, and add it to the ViewState in the first Page_Load on
that page.
2. in the btnLogin_Click event on Login.aspx, the SetAuthCookie() event
should be called, and the user should be Response.Redirected to the
referrer value in the viewstate.
Here is sample code:
*****************
Login.aspx
*****************
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
ViewState["originalUrl"] = Request.UrlReferrer.AbsoluteUri;
}
private void btnLogin_Click(object sender, System.EventArgs e)
{
string originalUrl = ViewState["originalUrl"];
if(originalUrl == null || originalUrl == "") // in case the viewstate
is corrupt, use default.aspx by 'default'
originalUrl = "default.aspx";
// do your password checking here
// if it's all ok then...
FormsAuthentication.SetAuthCookie(username, false);
Response.Redirect(originalUrl, true);
}
i've read a lot of posts here about people who ran into problems using
forms authentication, and the RedirectFromLoginPage() method, which
always redirects to a default.aspx. this is a big problem if you use
sub-folders that don't have a default.aspx page, as in my case.
i read some posts that suggested manually Response.Redirecting the user
to the url in the querystring, but actually this is incorrect because
Forms Auth puts the default.aspx in that querystring even if the user
wasn't at a page called default.aspx.
i put together a simple solution to get the redirecting to work
properly, and would like to post it here for future reference:
1. the Login page (Login.aspx) must be set up to read the
HTTP_Referrer, and add it to the ViewState in the first Page_Load on
that page.
2. in the btnLogin_Click event on Login.aspx, the SetAuthCookie() event
should be called, and the user should be Response.Redirected to the
referrer value in the viewstate.
Here is sample code:
*****************
Login.aspx
*****************
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
ViewState["originalUrl"] = Request.UrlReferrer.AbsoluteUri;
}
private void btnLogin_Click(object sender, System.EventArgs e)
{
string originalUrl = ViewState["originalUrl"];
if(originalUrl == null || originalUrl == "") // in case the viewstate
is corrupt, use default.aspx by 'default'
originalUrl = "default.aspx";
// do your password checking here
// if it's all ok then...
FormsAuthentication.SetAuthCookie(username, false);
Response.Redirect(originalUrl, true);
}