在一个数据库中结合 MVC4 和 Symfony2 用户

Posted

技术标签:

【中文标题】在一个数据库中结合 MVC4 和 Symfony2 用户【英文标题】:Combining MVC4 and Symfony2 users in one database 【发布时间】:2012-12-28 16:14:19 【问题描述】:

我有一个 web 应用程序,它有一个使用 Symfony2 的前台和一个使用 ASP.NET MVC4 的后台(在你告诉我之前,是的,我知道这是一个荒谬的设置,但这些是我们必须遵守的限制)。

我现在想在我的数据库中有一个用户表,用户可以从该表中登录前台 (SF2) 和后台 (MVC4)。我使用 FOSUserBundle 来管理 Symfony2 端的用户,但我还没有决定应该为应用程序的 MVC4 部分使用哪个成员资格提供程序,主要是因为我不知道如何在 ASP 端对用户进行身份验证。

FOSUserBundle 在注册用户/更改密码时使用具有 5000 次迭代的 SHA512。散列密码和密码盐都存储在数据库中——这一切都很好。问题是我不确定我应该如何在 MVC4 应用程序中使用这些数据;我做了一些研究,看看我是否可以更改散列算法等,但这需要我制作一个自定义会员提供程序,这对于以前从未使用过 MVC4 的人来说有点令人生畏。

谁能指出我正确的方向?将不胜感激。

【问题讨论】:

有趣的问题。我很确定 Symfony2 身份验证内容足够灵活,可以从 MVC4 端读取,如果您发现采用另一种方式过于繁琐。 【参考方案1】:

您可以write a custom membership provider 查询您的数据库。基本上你必须编写一个派生自MembershipProvider 的类并实现你想要使用的方法。有很多方法,但您可能不需要全部覆盖它们。例如,ValidateUser 方法采用用户名和密码,由您来处理这种情况。

例如:

public class MyCustomMembershipProvider: MembershipProvider

    ...

然后你可以在你的 web.config 中注册这个自定义的会员提供者来替换默认的:

<membership defaultProvider="MyCustomMembershipProvider">
    <providers>
        <clear/>
        <add name="MyCustomMembershipProvider" 
             type="MvcApplication1.Providers.MyCustomMembershipProvider" />
    </providers>
</membership>

现在,当您在 LogOn 操作中调用 Membership.ValidateUser 时,它将委托给您的自定义提供程序。

【讨论】:

谢谢,我一定会试一试的!

以上是关于在一个数据库中结合 MVC4 和 Symfony2 用户的主要内容,如果未能解决你的问题,请参考以下文章

详解基于MongoDB的地理位置查询,结合Symfony2演示

Symfony2 - 验证不适用于嵌入式表单类型

在 MVC4 视图中按类别对订单进行分组

MVC4如何在父视图单击提交时获取部分视图中的数据

使用 t4 Scaffolding 在 mvc4 中获取模型(TableName)的元数据

在 symfony2 中创建表