【问题标题】:Where to place the authentication logic in Laravel?Laravel 中的认证逻辑应该放在哪里?
【发布时间】:2014-10-26 20:48:13
【问题描述】:

我已使用本教程在 Laravel 中创建我的用户登录:Laravel Authentication Essentials。所以我有一个SessionController,其中包含createstoredestroy 方法,分别用于显示表单、登录和退出。

但是本教程中没有模型,验证和Auth::attempt 在控制器中。而这感觉不对。我无法创建Session 模型,因为Session 类已经存在。

我应该将登录/退出逻辑放在User 模型中,还是有其他符合 MVC 架构模式的方法?

【问题讨论】:

    标签: php authentication laravel laravel-4


    【解决方案1】:

    首先,请记住(或知道)您可以更改 Laravel 中的所有内容。如果您需要使用会话表的 Session 模型,请转到 app/config/session.php 并将 Laravel 会话表更改为 laravel_sessions:

    'table' => 'laravel_sessions',
    

    如今人们做事的方式有所不同,方法每天都在改进,编写代码的方式必须让您感到舒适。如果你觉得你看到人们做事的方式不正确,那就改变它,Laravel 赋予你改变和做事的能力。如果您觉得自己刚刚找到了更好的方法,请分享。

    这是 2013 年的视频,而今天 Jeffrey 正在以完全不同的方式进行身份验证。注册一个Laracasts 帐户并观看完整的Build a Larabook 系列视频,看看他现在的表现。

    本教程中没有 Session 模型,因为他没有将会话(成功登录)存储在会话表中。

    在教程中他从不接触用户模型,因此用户模型中没有登录。他唯一用来进行身份验证的是Auth::attempt(),这是一个 Laravel 外观方法,它在内部使用用户模型 (M) 来查找用户并检查密码是否匹配。他正在使用 Session controller (C),所有与登录(或登录)相关的内容和显示登录视图 (V) 都在内部完成那个特定的控制器。

    如果对您来说更容易,您可以将 SessionsController 重命名为 LoginController,我本人不太喜欢登录时使用 Sessions 名称,但这是一个口味问题,而不是代码正确性。

    话虽如此,我没有在该视频中看到 MVC(或本周人们喜欢称之为的任何名称)问题。

    编辑 回复评论:

    模型的目的是针对数据,没有数据,就没有模型。在 Laravel 和数据库管理系统的上下文中,是的,没有表,没有模型。例如,在客户端-服务器 API 的上下文中,您的服务器 API(Laravel、Rails...)将为您的客户端模型(Angular、EmberJS...)提供数据,因此不会有直接相关的表到客户端模型,但仍然是模型。

    但在这种特殊情况下,您正在通过服务(身份验证服务)访问模型(用户模型)。

    【讨论】:

    • 另一个很好的答案,谢谢安东尼奥:) 所以模型的目的是针对数据库表,没有表就没有模型? (简而言之)我一直倾向于注册 Laracasts 有一段时间了,很棒的资源!
    • 再次感谢,非常有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2010-10-11
    • 2018-06-14
    相关资源
    最近更新 更多