关于 SimpleMembership 中 CreateDate 的问题
使用 WebMatrix.WebData.WebSecurity.CreateUserAndAccount(model.UserName, model.Password,
new
{
Email = model.UserName,
model.NickName,
model.Sex,
model.Province,
model.City,
model.ProvinceName,
model.CityName,
RegIp = Dev.Comm.Web.HostHelper.getRealIp()
}, true);
创建用户,在数据库中记录不是当前时区的时间,记录的 UTC 时间 (http://zh.wikipedia.org/zh/%E5%8D%8F%E8%B0%83%E4%B8%96%E7%95%8C%E6%97%B6),所以这SB玩意记录的是0时区的的时间, 在取出后,所以与当前时间差8小时, 北京时间为+8时区。
下面反编后的代码片断。
// WebMatrix.WebData.SimpleMembershipProvider
/// <summary>Creates a new user account by using the specified user name and password.</summary>
/// <returns>A token that can be sent to the user to confirm the user account.</returns>
/// <param name="userName">The user name.</param>
/// <param name="password">The password.</param>
/// <param name="requireConfirmationToken">(Optional) true to specify that the user account must be confirmed; otherwise, false. The default is false.</param>
/// <exception cref="T:System.Web.Security.MembershipCreateUserException">
/// <paramref name="username" /> is empty.-or-<paramref name="username" /> already has a user account.-or-<paramref name="password" /> is empty.-or-<paramref name="password" /> is longer than 128 characters.-or-A user record that corresponds to <paramref name="username" /> does not exist in the <see cref="P:WebMatrix.WebData.SimpleMembershipProvider.UserTableName" /> table (the user profile table).-or-The database operation failed.</exception>
/// <exception cref="T:System.InvalidOperationException">The <see cref="T:WebMatrix.WebData.SimpleMembershipProvider" /> class was not initialized using a call to the <see cref="Overload:WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection" /> method.</exception>
public override string CreateAccount(string userName, string password, bool requireConfirmationToken)
{
this.VerifyInitialized();
if (password.IsEmpty())
{
throw new MembershipCreateUserException(MembershipCreateStatus.InvalidPassword);
}
string text = Crypto.HashPassword(password);
if (text.Length > 128)
{
throw new MembershipCreateUserException(MembershipCreateStatus.InvalidPassword);
}
if (userName.IsEmpty())
{
throw new MembershipCreateUserException(MembershipCreateStatus.InvalidUserName);
}
string result;
using (IDatabase database = this.ConnectToDatabase())
{
int userId = SimpleMembershipProvider.GetUserId(database, this.SafeUserTableName, this.SafeUserNameColumn, this.SafeUserIdColumn, userName);
if (userId == -1)
{
throw new MembershipCreateUserException(MembershipCreateStatus.ProviderError);
}
object arg = database.QuerySingle("SELECT COUNT(*) FROM [" + SimpleMembershipProvider.MembershipTableName + "] WHERE UserId = @0", new object[]
{
userId
});
if (SimpleMembershipProvider.<CreateAccount>o__SiteContainer22.<>p__Site23 == null)
{
SimpleMembershipProvider.<CreateAccount>o__SiteContainer22.<>p__Site23 = CallSite<Func<CallSite, object, bool>>.Create(Binder.UnaryOperation(CSharpBinderFlags.None, ExpressionType.IsTrue, typeof(SimpleMembershipProvider), new CSharpArgumentInfo[]
{
CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null)
}));
}
Func<CallSite, object, bool> arg_191_0 = SimpleMembershipProvider.<CreateAccount>o__SiteContainer22.<>p__Site23.Target;
CallSite arg_191_1 = SimpleMembershipProvider.<CreateAccount>o__SiteContainer22.<>p__Site23;
if (SimpleMembershipProvider.<CreateAccount>o__SiteContainer22.<>p__Site24 == null)
{
SimpleMembershipProvider.<CreateAccount>o__SiteContainer22.<>p__Site24 = CallSite<Func<CallSite, object, int, object>>.Create(Binder.BinaryOperation(CSharpBinderFlags.None, ExpressionType.GreaterThan, typeof(SimpleMembershipProvider), new CSharpArgumentInfo[]
{
CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null)
}));
}
Func<CallSite, object, int, object> arg_18C_0 = SimpleMembershipProvider.<CreateAccount>o__SiteContainer22.<>p__Site24.Target;
CallSite arg_18C_1 = SimpleMembershipProvider.<CreateAccount>o__SiteContainer22.<>p__Site24;
if (SimpleMembershipProvider.<CreateAccount>o__SiteContainer22.<>p__Site25 == null)
{
SimpleMembershipProvider.<CreateAccount>o__SiteContainer22.<>p__Site25 = CallSite<Func<CallSite, object, int, object>>.Create(Binder.GetIndex(CSharpBinderFlags.None, typeof(SimpleMembershipProvider), new CSharpArgumentInfo[]
{
CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null)
}));
}
if (arg_191_0(arg_191_1, arg_18C_0(arg_18C_1, SimpleMembershipProvider.<CreateAccount>o__SiteContainer22.<>p__Site25.Target(SimpleMembershipProvider.<CreateAccount>o__SiteContainer22.<>p__Site25, arg, 0), 0)))
{
throw new MembershipCreateUserException(MembershipCreateStatus.DuplicateUserName);
}
string text2 = null;
object obj = DBNull.Value;
if (requireConfirmationToken)
{
text2 = SimpleMembershipProvider.GenerateToken();
obj = text2;
}
int num = 0;
int num2 = database.Execute("INSERT INTO [" + SimpleMembershipProvider.MembershipTableName + "] (UserId, [Password], PasswordSalt, IsConfirmed, ConfirmationToken, CreateDate, PasswordChangedDate, PasswordFailuresSinceLastSuccess) VALUES (@0, @1, @2, @3, @4, @5, @5, @6)", new object[]
{
userId,
text,
string.Empty,
!requireConfirmationToken,
obj,
DateTime.UtcNow,
num
});
if (num2 != 1)
{
throw new MembershipCreateUserException(MembershipCreateStatus.ProviderError);
}
result = text2;
}
return result;
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
解决方案:
/// <summary>
/// 将UTC 时间 转化为本地化时间
/// </summary>
/// <param name="utcDate"></param>
/// <returns></returns>
public static DateTime UtcToLocal(DateTime utcDate)
{
DateTime convertedDate = DateTime.SpecifyKind(utcDate, DateTimeKind.Utc);
var localtime = convertedDate.ToLocalTime();
return localtime;
}
// TEST
[TestClass]
public class DateUtilTest
{
[TestMethod]
public void UtcToLocal()
{
var UtcDate = new DateTime(2013, 1, 1, 1, 1, 1);
DateTime converted = DateUtil.UtcToLocal(UtcDate);
Assert.AreEqual(UtcDate.AddHours(8), converted);
}
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
已经更新至 https://github.com/zbw911/Dev.All/tree/master/DLL%20Release 最新dll
关于 SimpleMembership 中 CreateDate 的问题的更多相关文章
- SimpleMembership
最近2个月以来,一直在学习MVC,从最开始的2,一直到最新的4.从原来的aspx到现在的Razor引擎,越学越开心,越学越上瘾. 最近为新项目做准备,打算用MVC4,VS2012+SQL2012,反正 ...
- SQL 分组后获取其中一个字段最大值的整条记录
--有id,name,createDate的一张表testTable--根据name分组,获取每组中createDate最大的那条记录(整条)查询出来------------------------- ...
- EF-CodeFirst系列100
.学习资料地址: CodeFirst:https://msdn.microsoft.com/zh-cn/data/jj193542 一.CodeFirst迁移(Migration) .工具--> ...
- MongoDB Index
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录. 这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要 ...
- MongoDB 基础知识学习笔记
注意:本文假设您已经安装好 MongoDB 数据库并启动它了. 连接 MongoDB.数据库操作.集合操作 连接 MongoDB mongo ip:port/dbName -u username -p ...
- Python开源框架
info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...
- [转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别
1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会 ...
- 关于mybatis中mapper.xmlSQL语句书写的心得
本文主要针对MySQL ---------------------------------------------------------------------------------------- ...
- 大数据系列-CDH环境中SOLR入数据
1 创建集合 SSH远程连接到安装了SOLR的CDH节点. 运行solrctl instancedir --generate /solr/test/GX_SH_TL_TGRYXX_2 ...
随机推荐
- EasyGui
EasyGui 在IDLE上运行EasyGui可能存在冲突 EasyGui是运行在Tkinter上并哟拥有自身的事件循环,而IDLE也是Tkinter写的一个应用程序并页拥有自身的事件循环.两者同时运 ...
- HDU ACM Fibonacci
Problem Description Fibonacci numbers are well-known as follow: Now given an integer N, please find ...
- 转:创建一个javaweb项目,以及导出war包
一.使用IDEA创建一个javaweb项目 1.File->New Project选择Web Application 1 2 然后填写好路径和项目名称,点击确定. 1 2 2.先看一下刚创建好的 ...
- Class.forName和ClassLoader.loadClass区别(转)
Java中class是如何加载到JVM中的:1.class加载到JVM中有三个步骤 装载:(loading)找到class对应的字节码文件. 连接:(linking)将对应的字节码文件读入 ...
- windows下利用VMware安装mac:构建…
安装条件: 硬件:一台拥有支持虚拟技术的64位双核处理器和2GB以上内存的PC. 注意:运行MAC OS,需要电脑支持虚拟技术(VT),安装时,需要将VT启动,在BIOS中开启. 关于如何检测你的电脑 ...
- C#中插入换行符
要让一个Windows Form的TextBox显示多行文本就得把它的Multiline属性设置为true. 这个大家都知道,可是当你要在代码中为Text属性设置多行文本的时候可能会遇到点麻烦:) 你 ...
- selenium2 用Yaml文件进行元素管理 (五)
比如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要去创建test对象.如果id号变了,我们也只需要改一下test的名称就行了. 使用Yaml需要用 ...
- apt-get update 时的问题 W:Failed to fetch gzip:/var/lib/apt/lists/partial...解决办法
http://askubuntu.com/questions/149454/upgrade-from-11-04-to-11-10-getting-wfailed-to-fetch-gzip 这个问题 ...
- Docker学习笔记_下载镜像更换为国内源,实现快速下载image
1.编辑/etc/docker/daemon.json,增加下面内容: { "registry-mirrors": ["https://registry.docker-c ...
- 使用Python定时执行一任务,自动登录某web系统,生成报表,然后发送邮件给指定人员
一.项目需求 每周从A系统生成一张Excel报表,发送此报表给指定人员,相关人员依据此报表去完成后续的工作. 项目限制: 1.无法通过EDI系统交互的方式从后台读取数据 2.由于公司网络环境限制,不能 ...