Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
Sounds strange, can you post a version of the full code that still redirects to start page but shouldn't?
When I tested it worked fine redirecting to /episerver/cms using this test code:
Action:
[HttpPost] public ActionResult TestRedirect() { return Redirect("/episerver/cms"); }
View:
<div> @using (Html.BeginForm("TestRedirect", "Test", FormMethod.Post)) { <button type="submit">Test</button> } </div>
(I'm already logged in when doing this, but the outcome should be the same regardless of when you login the user.)
Here is the full monty.
View:
<div class="modal"> @using (Html.BeginForm("LocalLogin", "CustomLogin", FormMethod.Post)) { @Html.AntiForgeryToken() <ol class="clearfix"> <li> <img src="/util/images/login/DXC_long.svg" alt="logo" class="logo" /> </li> <li> <div class="validation-summary text--error"> @Html.ValidationSummary() </div> </li> <li> @Html.LabelFor(x => x.Username) @Html.TextBoxFor(x => x.Username) </li> <li> @Html.LabelFor(x => x.Password) @Html.PasswordFor(x => x.Password) </li> <li> <input type="submit" value="Log in" class="epi-button-child-item" /> </li> <li> <p class="text--small"> <a "#" onclick="toggleCookieText(); return false;"> When you log in, cookies will be used. </a> </p> <div id="cookieInfoPanel" class="cookie-information"> <p class="text--small"> A cookie containing login information will be sent to your web browser. If you do not want to receive cookies, you will be unable to log into the website. </p> </div> </li> </ol> } </div>
Controller:
namespace A1Digital.Site.Controllers { public class CustomLoginController : Controller { private UISignInManager uiSignInManager = ServiceLocator.Current.GetInstance<UISignInManager>(); private UIUserProvider uiUserProvider = ServiceLocator.Current.GetInstance<UIUserProvider>(); public ActionResult Index() { return View(Global.CustomLoginView); } [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] [ValidateInput(false)] public ActionResult LocalLogin(CustomLoginViewModel model) { if (ModelState.IsValid) { bool result = uiSignInManager.SignIn(uiUserProvider.Name, model.Username, model.Password); if (result) { return Redirect("/EPiServer/CMS"); } } ModelState.AddModelError("LoginError", "Login failed"); return View(Global.CustomLoginView, model); } } }
Moreover, when taking a look at the network tab in the browsers console, the request points correctly to "/CustomLogin/LocalLogin" with a HTTP Status Code of "302 - Found", but the "Location" header of the response is "/".
If you manually visit "/episerver" after being redirected to "/", is your user considered to be logged in?
Do you have an <authentication>-element in your web.config? If you have one, what does it look like?
Yes, after the user is redirected to "/" he can even see the orange EPiServer menu in the upper right corner and can access the backend.
That's what the <authentication>-element looks like in our web.config:
<authentication mode="None"> </authentication>
Does this happen in a specific environment?
Can you test what happens if you use the basic redirect code I posted above? You can first login (for example through "/Util/Login.aspx").
So far I have only tested this on my local machine (we have the DXC subscription).
Interestingly your code works. When clicking the "Test" button, I get redirected to /episerver/cms.
probably late to the party and not sure if it's related, but looking at `EPiServer.Cms.UI.AspNetIdentity.ApplicationUISignInManager<TUser>` you can see that it does redirect on its own.
public override bool SignIn(string providerName, string userName, string password) { string returnUrl = this.GetReturnUrl(); if (!this._signInManager().SignIn(userName, password, returnUrl)) return false; this.Redirect(returnUrl); return true; }
and there is custom redirect method in that manager:
protected virtual void Redirect(string returnUrl) { HttpContext current = HttpContext.Current; if (current == null) return; if (string.IsNullOrWhiteSpace(returnUrl)) return; try { current.Response.Redirect(VirtualPathUtility.ToAbsolute(returnUrl), false); current.ApplicationInstance.CompleteRequest(); current.Response.End(); } catch (ThreadAbortException ex) { } }
NB! note `currect.Response.End()` method..
and redirect url is standard aspnet query string (if present) - "?ReturnUrl=..". you can give it a try and test login process with custom redirect url just to make sure that this signin manager is not messing things up.
I just tried to login with the ReturnUrl parameter like "/CustomLogin?ReturnUrl=%2Fepiserver%2Fcms" but again simply got redirected to "/" .
can you add what request is being posted to the controller (can capture network traffic in dev tools for instance)?
the login page is really a custom one (and just looks like built-in) or you use default epi login page?
Yes, this is actually a custom login page and just looks like the OOTB login page (for now ^^).
ok, and custom login page form containing action with "ReturnUrl" query string?
@using (Html.BeginForm("LocalLogin", "CustomLogin", new { ReturnUrl = "http://takemehome.com" }, FormMethod.Post))
?
Hello again Patrick!
I started setting up a project of my own which makes use of ASP.NET Identity. After I set it up I decided to take a proper look at solving this issue.
It was indeed the absence of ReturnUrl that caused it. The solution to this that I came up with can be found here:
The solution doesn't require you to set a ReturnUrl at all (if you don't want to) and it also enables you to use your OWIN configuration file to specify a redirect location when users sign in.
Hope this helps!
Thanks a lot @Valdis for pointing us in the right direction!
Hi folks,
We have a custom login page in place, quite similar to this one here.
We would like to redirect users to the backend, to be precise to "/EPiServer/CMS".
Currently, the code in the CustomLoginController looks like this:
So we tried different things here to actually redirect to the backend but whatever we do we always get redirected to the StartPage / index page. Things we have tried:
Any ideas what we are doing wrong?
Best regards,
Patrick