从MVC4迁移到MVC5,也想使用ASP.NET身份,但是我正在努力寻找能够满足我迁移身份所需的所有内容。将现有网站从SimpleMembership迁移到ASP.NET Identity,建议我要做的就是创建ApplicationUser
和迁移数据,其他Web搜索为我提供sql脚本和passowrd哈希建议。但是,在进入之前,我还想解决其他松散的问题。
首先-我有代码可以在我的Seed方法中初始化成员资格系统:
if (!WebSecurity.Initialized)
WebSecurity.InitializeDatabaseConnection(Config.ConnectionStringName,
Config.UsersTableName,
Config.UsersIDColumn,
Config.UserNameColumn,
autoCreateTables: true);
所以那需要正确吗?
第二-看起来我需要一个IdentityDbContext
。那么我应该更改现有上下文来继承它吗?
即代替我当前的代码public class SID2013Context : DbContext
:public class SID2013Context : IdentityDbContext<ApplicationUser>
这样会不会产生迁移,从而创建我需要支持ASP.NET Identity的新表?
完成此操作后,我应该能够插入AccountController
,Views,ViewModels并启动为MVC5项目生成的代码。
任何人都可以在这里回答具体问题和/或为我提供更好的资源吗?
我意识到我所链接的网站告诉您如何迁移到Identity
表格,但仍在使用SimpleMembership
。我想始终使用Identity,因此我使用Visual Studio创建了一个空的MVC应用程序,以便可以复制所需的代码并进行修复。这是我执行登录和注销工作的步骤:
ApplicationUser.cs
到我的模型项目IdentityConfig.cs
到我的App_Start文件夹Startup.Auth.cs
到我的App_Start文件夹AccountController.cs
到我的Controllers文件夹(重命名为现有控制器)Startup.cs
到根文件夹AccountViewModels.cs
到ViewModels文件夹IdentityDbContext
(确实确实意味着在迁移中创建了新表)Add-Migration
给出了一个错误...“ EntityType IdentityUserRole没有定义键”base.OnModelCreating
在我的替代中添加来解决Add-Migration
&Update-Database
-添加所需的表UserProfile
到ApplicationUser
数据库中并更新了数据库SecurityStamp
Guid以防止在登录期间出错UserProfile
,SimpleRoleProvider
以及RoleManager
类-更换必要的代码中。WebMatrix.Data
和WebMatrix.WebData
dll的引用<roleManager enabled="true" defaultProvider="simple">
并<membership defaultProvider="simple">
从web.config中步骤14中使用的SQL:
INSERT INTO dbo.aspnetusers (id
, email
, emailconfirmed
, passwordhash
, securitystamp
, phonenumber
, phonenumberconfirmed
, twofactorenabled
, lockoutenddateutc
, lockoutenabled
, accessfailedcount
, username
, organisationid
, firstname
, lastname
, inactive)
SELECT
u.id,
u.username Email,
m.isconfirmed EmailConfirmed,
m.password PasswordHash,
--SignInManager.PasswordSignInAsync (used in Login method)
--throws an exception http://stackoverflow.com/a/23354148/150342
NEWID() SecurityStamp,
u.telephone PhoneNumber,
CASE
WHEN u.telephone IS NULL THEN 0
ELSE 1
END PhoneNumberConfirmed,
0 TwoFactorEnabled,
NULL LockoutEndDateUtc,
0 LockoutEnabled,
m.passwordfailuressincelastsuccess AccessFailedCount,
u.username,
u.organisationid,
u.firstname,
u.lastname,
u.inactive
FROM dbo.userprofiles u
INNER JOIN dbo.webpages_membership m
ON m.userid = u.id
WHERE NOT EXISTS (SELECT
1
FROM dbo.aspnetusers
WHERE id = u.id)
INSERT INTO dbo.aspnetroles (id
, name)
SELECT
roleid,
rolename
FROM dbo.webpages_roles r
WHERE NOT EXISTS (SELECT
1
FROM dbo.aspnetroles
WHERE roleid = r.roleid)
INSERT INTO dbo.aspnetuserroles (userid
, roleid)
SELECT
userid,
roleid
FROM dbo.webpages_usersinroles ur
WHERE NOT EXISTS (SELECT
1
FROM dbo.aspnetuserroles
WHERE userid = ur.userid
AND roleid = ur.roleid)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句