C# 用户身份用户名保存
我想救你C# 用户身份用户名保存,c#,api,owin-middleware,C#,Api,Owin Middleware,我想救你 HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new GenericIdentity(user.UserName), new string[] { /* fill roles if any */ }); string f = HttpContext.Current.User.Identity.Name; //在这里,它在login方法中成功显示用户名
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new GenericIdentity(user.UserName), new string[] { /* fill roles if any */ });
string f = HttpContext.Current.User.Identity.Name;
//在这里,它在login方法中成功显示用户名,但当我稍后尝试在另一个方法中获取user.identity.name时,它返回null值,我将发布我使用owin identity的登录方法
登录后,它总是没有经过身份验证或授权
public async Task<IHttpActionResult> Login(LoginViewModel model)
{
if (!ModelState.IsValid)
{
return BadRequest();
}
try
{
var result = await SignInManager.PasswordSignInAsync(model.username, model.Password, isPersistent: true, shouldLockout: false);
var user = await UserManager.FindByNameAsync(model.username);
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = true },
await user.GenerateUserIdentityAsync(UserManager));
if (result == SignInStatus.Success && user != null)
{
int temp_loginTimes = user.login_times;
temp_loginTimes++;
user.login_times = temp_loginTimes;
user.last_login = Convert.ToDateTime(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture));
user.ip = model.ip;
user.device_type = model.device_type;
var res = await UserManager.UpdateAsync(user);
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new GenericIdentity(user.UserName), new string[] { /* fill roles if any */ });
string f = HttpContext.Current.User.Identity.Name;
FormsAuthentication.SetAuthCookie(model.username, true);
if (res.Succeeded == true)
{
LoginHistoryBLL loginHistory = new LoginHistoryBLL();
var rese = loginHistory.SaveLogInDetails(new LoginHistoryDTO() { username = user.UserName, logindate = (DateTime)user.last_login, creater = user.creater, type = user.type, device = model.device_type, ip = model.ip });
UserDTO userDTO = new UserDTO();
if (rese.ok == true) {
userDTO.username = user.UserName;
userDTO.creater = user.creater;
userDTO.login_times = user.login_times;
userDTO .balance = user.balance;
userDTO.password= user.PasswordHash;
userDTO.type = user.type;
userDTO.bonus = user.bonus;
userDTO.balance_in = user.balance_in;
userDTO.balance_out = user.balance_out;
userDTO.device_type = user.device_type;
userDTO.status = user.status;
userDTO.percantageOfLuck = user.percantageOfLuck;
userDTO.double_bunos_active = user.double_bunos_active;
userDTO.level = user.level;
string gf = User.Identity.Name; //until here work everything fine
return Ok(userDTO);
}
else
return BadRequest("user not saved in history");
}
else
{
return BadRequest("user not updated");
}
}
else
{
return BadRequest("user not assign");
}
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
公共异步任务登录(LoginViewModel模型)
{
如果(!ModelState.IsValid)
{
返回请求();
}
尝试
{
var result=await-SignInManager.PasswordSignInAsync(model.username,model.Password,ispersist:true,shouldllockout:false);
var user=await UserManager.FindByNameAsync(model.username);
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
AuthenticationManager.SignIn(新的AuthenticationProperties(){IsPersistent=true},
等待user.GenerateUserIdentityAsync(UserManager));
if(result==SignInStatus.Success&&user!=null)
{
int temp_loginTimes=user.login_次;
temp_loginTimes++;
user.login\u times=临时登录时间;
user.last_login=Convert.ToDateTime(DateTime.Now.ToString(“yyyy/MM/dd HH:MM:ss”,CultureInfo.InvariantCulture));
user.ip=model.ip;
user.device\u type=model.device\u type;
var res=await UserManager.UpdateAsync(用户);
HttpContext.Current.User=new System.Security.Principal.GenericPrincipal(新的GenericEntity(User.UserName),新字符串[]{/*如果有,请填写角色*/});
字符串f=HttpContext.Current.User.Identity.Name;
FormsAuthentication.SetAuthCookie(model.username,true);
如果(res.successed==true)
{
LoginHistoryBLL loginHistory=新的LoginHistoryBLL();
var rese=loginHistory.SaveLogInDetails(新的LoginHistoryTo(){username=user.username,logindate=(DateTime)user.last\u login,creater=user.creater,type=user.type,device=model.device\u type,ip=model.ip});
UserDTO UserDTO=新UserDTO();
如果(rese.ok==true){
userDTO.username=user.username;
userDTO.creater=user.creater;
userDTO.login\u次=user.login\u次;
userDTO.balance=user.balance;
userDTO.password=user.PasswordHash;
userDTO.type=user.type;
userDTO.bonus=user.bonus;
userDTO.balance_in=user.balance_in;
userDTO.balance\u out=user.balance\u out;
userDTO.device_type=user.device_type;
userDTO.status=user.status;
userDTO.percantigeofluck=user.percantigeofluck;
userDTO.double\u bunos\u active=user.double\u bunos\u active;
userDTO.level=user.level;
字符串gf=User.Identity.Name;//直到这里一切正常
返回Ok(userDTO);
}
其他的
返回BadRequest(“未保存在历史记录中的用户”);
}
其他的
{
返回请求(“用户未更新”);
}
}
其他的
{
返回请求(“用户未分配”);
}
}
捕获(例外情况除外)
{
返回请求(例如消息);
}
}
但是对于ex:用这种方法我什么也得不到
// POST api/Account/getuserwithcreater
[Route("getuserwithcreater")]
[HttpGet]
public async Task<IHttpActionResult> GetUsersAsync()
{
using (var context = new ApplicationDbContext())
{
ApplicationUser curuser = await UserManager.FindByIdAsync(User.Identity.GetUserId());
List<UserDTO> us = new List<UserDTO>();
foreach (var item in UserManager.Users)
{
if (item.creater == User.Identity.Name)
{
UserDTO userDTO = new UserDTO(); ;
userDTO.username = item.UserName;
userDTO.creater = item.creater;
userDTO.login_times = item.login_times;
userDTO.balance = item.balance;
userDTO.password = item.PasswordHash;
userDTO.type = item.type;
userDTO.bonus = item.bonus;
userDTO.balance_in = item.balance_in;
userDTO.balance_out = item.balance_out;
userDTO.device_type = item.device_type;
userDTO.status = item.status;
userDTO.percantageOfLuck = item.percantageOfLuck;
userDTO.double_bunos_active = item.double_bunos_active;
userDTO.level = item.level;
us.Add(userDTO);
}
}
return Ok(us);
}
}
//发布api/Account/getuserwithcreater
[路由(“getuserwithcreater”)]
[HttpGet]
公共异步任务GetUsersAsync()
{
使用(var context=new ApplicationDbContext())
{
ApplicationUser curuser=wait UserManager.FindByIdAsync(User.Identity.GetUserId());
List us=新列表();
foreach(UserManager.Users中的var项)
{
if(item.creater==User.Identity.Name)
{
UserDTO UserDTO=新的UserDTO();
userDTO.username=item.username;
userDTO.creater=item.creater;
userDTO.login_times=item.login_times;
userDTO.balance=item.balance;
userDTO.password=item.PasswordHash;
userDTO.type=item.type;
userDTO.bonus=item.bonus;
userDTO.balance\u in=item.balance\u in;
userDTO.balance\u out=item.balance\u out;
userDTO.device\u type=item.device\u type;
userDTO.status=item.status;
userDTO.percantigeofluck=item.percantigeofluck;
userDTO.double\u bunos\u active=item.double\u bunos\u active;
userDTO.level=item.level;
添加(userDTO);
}
}
返回Ok(美国);
}
}
看起来您有一个登录端点,您应该在owin管道中作为身份验证中间件本身进行身份验证,并使用ClaimsIdentity
实际上我不熟悉身份验证,请您进一步解释一下