如何检查用户是否已登录,而不是会员

本文关键字:登录 是否 何检查 检查 用户 | 更新日期: 2023-09-27 18:19:20

已经尝试了2种不同的方法来检查用户是否从用户控制代码隐藏(.cs)文件的前端登录到Umbraco Administration:

Page.User.Identity.IsAuthenticated

umbraco.library.IsLoggedOn()

这两种方法总是返回false,即使我已经登录。如何检查用户是否正确登录??试着把这个放到前端。有没有办法在前端做到这一点?使用Umbraco Version 4.6.1

此外,在Umbraco的管理中,这些是用户,而不是成员!所以,我需要知道用户是否登录到Umbraco,而不是会员!

如何检查用户是否已登录,而不是会员

算了,我想明白了…

private bool _IsAdminLoggedIn = false;
if (umbraco.helper.GetCurrentUmbracoUser() != null)
{
    _IsAdminLoggedIn = !string.IsNullOrEmpty(umbraco.helper.GetCurrentUmbracoUser().UserType.Alias) && umbraco.helper.GetCurrentUmbracoUser().UserType.Alias == "admin";
}

现在_IsAdminLoggedIn返回true或false取决于UserType"admin"是否登录到Umbraco !

欢呼:)

Umbraco .helper. getcurrentumbracouser()在Umbraco 7.3.5版本中不适合我,所以我使用了这个:

private bool _IsAdminLoggedIn = false;
var userTicket = new System.Web.HttpContextWrapper(System.Web.HttpContext.Current).GetUmbracoAuthTicket();
if (userTicket != null)
{
    var currentUser = ApplicationContext.Services.UserService.GetByUsername(userTicket.Name);
    if (!String.IsNullOrEmpty(currentUser.UserType.Alias) && currentUser.UserType.Alias == "admin")
    {
    _IsAdminLoggedIn = true
    }
}

其他一些示例使用过时的方法检索用户类型。这里有一个更新的方法来检查用户是否登录并且是admin用户。

var userTicket = new HttpContextWrapper(HttpContext.Current).GetUmbracoAuthTicket();
if (userTicket != null)
{
    var currentUser = ApplicationContext.Services.UserService.GetByUsername(userTicket.Name);
    if (!currentUser.Groups.Any(x => x.Alias.Equals("admin")))
    {
        // Do something if the user is not an admin
        Response.Redirect("~/");
    }
}

在Umbraco 7.7中我使用Security.CurrentUser

_IsAdminLoggedIn = Security.CurrentUser.UserType.Alias == "admin";

我做了一个扩展方法:

public static class HttpContextExtensions
{
    public static bool IsUserLoggedInUmbraco(this HttpContext httpContext)
    {
        if (httpContext.User == null) return false;
        if (httpContext.User.Identity is UmbracoBackOfficeIdentity) return true;
        var userTicket = new HttpContextWrapper(httpContext).GetUmbracoAuthTicket();
        if (userTicket == null) return false;
        if (!UmbracoContext.Current.HttpContext.AuthenticateCurrentRequest(userTicket, renewTicket: false)) return false;
        return httpContext.User.Identity is UmbracoBackOfficeIdentity;
    }
}

你可以这样使用:

var isLoggedIn = HttpContext.Current.IsUserLoggedInUmbraco();

ogglass提到的System.Web.HttpContextWrapper(System.Web.HttpContext.Current).GetUmbracoAuthTicket方法似乎仍然在Umbraco v8.6中工作,但是我一直在GetUmbracoAuthTicket()上得到错误,直到我添加了这个using语句:

@using Umbraco.Web.Security;

所以在Razor视图中完整的解决方案是:

@using Umbraco.Web.Security;
    
@{
    var userTicket = new System.Web.HttpContextWrapper(System.Web.HttpContext.Current).GetUmbracoAuthTicket();
    if (userTicket == null)
    {
        // Redirect to authentication or other
    }
}