Orchard CMS:注销(登出)确认页面

4

当用户从前端退出时,是否有触发事件?我如何使用该事件将用户重定向到特定的视图或页面? 我希望用户在登出后收到一条消息,提示“您已成功退出”。

1个回答

7

像往常一样,使用Orchard有多种方法可以实现这个目标 :)

方法1:重写用户形状

当您注销时,会重定向到Orchard.Users.AccountController上的一个操作方法,该方法名为LogOff,它需要一个returnUrl参数。包含注销链接的形状位于~/Core/Shapes/Views/User.cshtml下,但是您可以通过在主题中创建一个名为Views/User.cshtml的副本来覆盖它(或使用形状跟踪模块查找此形状并创建替代形状)。

在您的副本中,您只需要更改

@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" })

方法二:IUserEventHandler

如果您需要更加灵活的需求,您可以实现Orchard.Users.Events.IUserEventHandler接口,在调用LoggedOut方法时重定向到您的确认页面:

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) { }
}

希望能帮到你!

我应该在哪里插入第二个方法?谢谢。 - user1477388
1
好的,您需要在其中一个模块中创建一个新的类文件并添加上述代码。您还需要为所有其他IUserEventHandler方法添加空实现以使其编译。 - mdm
1
不,如果您有一个模块,那么您将在相关模块文件夹中创建一个名为LoggedOutRedirect.cs的文件。如果您没有模块,可以创建一个模块。通过空实现,我指的是您需要定义IUserEventHandler中的所有方法以满足接口定义,但您不需要在所有方法中放置代码(只需在此情况下放置相关方法,例如LoggedOut)。 - mdm
1
不完全正确,没有核心的LoggedOutRedirect.cs文件。IUserEventHandler是一个接口。当发生某些事件时,Orchard会自动通知任何具有IUserEventHandler接口的类。因此,通过定义实现IUserEventHandler接口的自己的类,您正在订阅这些事件。您可以通过在类定义中单击IUserEventHandler(在其中单击“LoggedOutRedirect:IUserEventHandler”处)并按Ctrl-。来选择“实现接口IUserEventHandler”,让Visual Studio为您编写大部分类 :) - mdm
1
创建一个新的模块,否则在 Orchard 的模块更新时,你的代码可能会被清除。 - mdm
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接