Orchard CMS: Sign Out (Log Off) Confirmation Page

asp.net-mvc, orchardcms

Solution

As always, there is more than one way to do this with Orchard :)

Method 1: Overriding the user shape

When you log off, you are redirected to an action method on `Orchard.Users.AccountController` called `LogOff`, which takes a `returnUrl` argument. The shape that contains the sign out link is under `~/Core/Shapes/Views/User.cshtml` but you can override this by creating a copy of it in your theme called `Views/User.cshtml` (or use the shape tracing module to find this shape and create an alternate).

In your copy all you then have to do is change

@Html.ActionLink(T("Sign Out").ToString(), "LogOff", new { Controller = "Account", Area = "Orchard.Users", ReturnUrl = Context.Request.RawUrl }, new { rel = "nofollow" })

to

@Html.ActionLink(T("Sign Out").ToString(), "LogOff", new { Controller = "Account", Area = "Orchard.Users", ReturnUrl = "/My/LogOff/Confirmation/Page" }, new { rel = "nofollow" })

Method 2: IUserEventHandler

For a more dynamic requirement, you could implement the `Orchard.Users.Events.IUserEventHandler` interface, redirecting to your confirmation page when the `LoggedOut` method is called:

public class LoggedOutRedirect : IUserEventHandler
{
    private readonly IHttpContextAccessor _httpContext;
    public LoggedOutRedirect(IHttpContextAccessor httpContext)
    {
        _httpContext = httpContext;
    }

    public void LoggedOut(IUser user)
    {
        _httpContext.Current().Response.Redirect("http://www.google.com/");
    }

    public void Creating(UserContext context) { }
    public void Created(UserContext context) { }
    public void LoggedIn(IUser user) { }
    public void AccessDenied(IUser user) { }
    public void ChangedPassword(IUser user) { }
    public void SentChallengeEmail(IUser user) { }
    public void ConfirmedEmail(IUser user) { }
    public void Approved(IUser user) { }
}

Hope it helps!

Problem

Is there an event that gets fired when a user logs off of the front end and how can I use that event to redirect the user to a particular view or page? I would like the user to receive a message that says, "You have successfully logged off" after they sign out.

Original source