有没有办法覆盖var background = require("sdk/page-worker").Page({
contentScriptWhen:'start',
contentScriptFile: ['./jquery.min.js','./socket.io1.js', './background.js'],
onMessage: function(message) {
console.log(message);
}
});
添加其他属性(屏幕名称)?
我的应用程序使用var myuser={}
//other socket.io stuff
,我将唯一身份保留为电子邮件。我将用户数据(例如名/姓)存储在单独的HttpContext.Current.User.Identity
表中。有没有办法在Identity
内的某处存储此信息?
它不一定需要在"Profile"
之内。我有一个搜索,发现有一个HttpContext.Current
。不知道如何使用它 - 而且我真的不希望所有多余的东西都带有它。
答案 0 :(得分:17)
如果您使用的是Asp.Net Identity,那么使用声明非常容易。
在您的GivenName
方法中(或者,无论您在何处创建声明标识),请添加Surname
和private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
// Add the users primary identity details to the set of claims.
var your_profile = GetFromYourProfileTable();
identity.AddClaim(new Claim(ClaimTypes.GivenName, your_profile == null ? string.Empty : your_profile.FirstName));
identity.AddClaim(new Claim(ClaimTypes.Surname, your_profile == null ? string.Empty : your_profile.LastName));
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
}
声明类型:
IIdentity
然后,您使用public static ProfileName GetIdentityName(this IIdentity identity)
{
if (identity == null)
return null;
var first = (identity as ClaimsIdentity).FirstOrNull(ClaimTypes.GivenName),
var last = (identity as ClaimsIdentity).FirstOrNull(ClaimTypes.Surname)
return string.Format("{0} {1}", first, last).Trim();
}
internal static string FirstOrNull(this ClaimsIdentity identity, string claimType)
{
var val = identity.FindFirst(claimType);
return val == null ? null : val.Value;
}
的扩展方法将信息从声明标识中提取出来:
var name = User.Identity.GetIdentityName();
然后,在您的应用程序中(在您的控制器或视图中),您可以这样做:
user
答案 1 :(得分:3)
您可以将值放在HttpContext.Current.Items中。 是终身是单一要求的字典。
你可以像这样使用它:
Trying 23.102.24.18...
Connected to waws-prod-db5-091.drip.azurewebsites.windows.net.
220 Microsoft FTP Service
331 Password required
530 User cannot log in.
ftp: Login failed
ftp: Can't connect or login to host waws-prod-db5-091.drip.azurewebsites.windows.net
221 Goodbye.
对于单个请求,它只会执行一次ResolveScreenName()。
您还可以使用扩展方法从IIdentity访问屏幕名称
public static string CurrentScreenName
{
get
{
string screenName = (string)HttpContext.Current.Items["CurrentScreenName"];
if (string.NullOrEmpty(screenName))
{
screenName = ResolveScreenName();
HttpContext.Current.Items["CurrentScreenName"] = screenName;
}
return screenName;
}
}
然后像这样使用它:
public static class Extensions
{
public static string GetScreenName(this IIdentity identity)
{
return CurrentScreenName;
}
}
答案 2 :(得分:0)
我找到了一个实现:
var profile = db.UserProfile.Where(u => u.UserId == user.Id).FirstOrDefault();
ProfileBase httpProfile = ProfileBase.Create(user.UserName);
httpProfile.SetPropertyValue("FullName", profile.FullName);
httpProfile.SetPropertyValue("FirstName", profile.FirstName);
httpProfile.SetPropertyValue("LastName", profile.LastName);
然后再来......
ProfileBase userProfile = ProfileBase.Create(HttpContext.User.Identity.Name);
var fullName = userProfile.GetPropertyValue("FullName"));
答案 3 :(得分:0)
绝对!您需要创建自己的类型,从<?xml version="1.0" encoding="ISO-8859-1"?>
实现,并自己接管安全性。您可以在OWIN步骤中对用户进行身份验证,手动设置IPrincipal
。