如何检查用户是否已登录,而不是会员
本文关键字:登录 是否 何检查 检查 用户 | 更新日期: 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
}
}