【问题标题】:Password protect an ExpressionEngine template group密码保护 ExpressionEngine 模板组
【发布时间】:2012-10-14 19:37:14
【问题描述】:

我正在构建一个网站,其中员工将拥有自己的网站部分:example.com/jones、example.com/smith 等。jones 和 smith 是模板组,其中包含相同的模板(使用 Stash 和 Low保持一切干燥的变量)。一些用户会有不同的隐私需求。一方面,他们的部分将是公开的。另一方面,一些用户需要管理谁可以访问他们的内容(使用 Solspace 朋友)。

然而,在这个范围的中间,有些人只是想防止任何随机的人看到他们的内容。我不想使用成员/成员组来管理它。我不希望访问者需要注册才能看到内容。共享会员账户是一个选项,但我们排除了因为其他问题(如果重置密码、cmets 留在同一账户下等)。

我们想要的是对模板组进行密码保护。工作人员可以让人们知道在哪里可以看到他们的页面,并让用户知道密码是什么。这在服务器级别上都是可能的,但是是否可以允许用户直接管理密码?我们可以做的任何事情来尽量减少我们需要更好地进行管理。允许这种安全性的自定义字段和附加组件?我在 Devot-ee 上没有看到任何东西,论坛上的方法也没有这样做。有点远射,但我想我会问的。

【问题讨论】:

  • 仅供参考...我尝试使用 htaccess 和 htpasswd 方法在某些模板组上要求密码。但是它不起作用。这适用于“真实”目录,但由于 EE 实际上没有 URL 指示的文件夹,因此它不起作用。 example.com/private 在 server_path/system/expressionengine/templates/default_site/private 而不是 server_path/private
  • 这绝对可以。我想知道这个问题是否与隐藏 index.php 有关。您是否尝试过在 example.com/index.php/private 上触发密码?
  • htaccess文件放在要保护的目录下。据我所知,没有办法将它放在其他地方并告诉它要保护哪些目录。可以告诉它从哪里允许流量,即允许某些 url 或域访问内容,但需要其他人的密码。
  • 我一直在玩这个,发现 perishablepress.com/… 解释了一些事情。我可以让我的根 htaccess 文件触发密码提示,但是一旦我输入密码(无论是对还是错),我就会收到 500 个内部服务器错误。更多的调试要做,但越来越近了。

标签: expressionengine


【解决方案1】:

我想用我用来让 htaccess 和 htpasswd 工作以通过模板组保护的代码来更新它。它可以以与 Alex 相同的方式使用,但是是一种全有或全无的方法。它有自己的优点和缺点,但想把它作为一种选择来分享。

首先,我使用的是原生模板行为:example.com/group/template/url_title。我想用密码保护一些模板组,但在 EE 的成员和成员组之外。即单个用户和密码。

我的 htaccess 文件如下所示(来自http://perishablepress.com/enable-file-or-directory-access-to-your-htaccess-password-protected-site/):

# We set some variables, matching URL's for which we do not wish to active
# the password protection
SetEnvIf Request_URI "^/privategroup.*$" private

# Setup the password protection
AuthName "Password Needed"
AuthGroupFile /dev/null
AuthType Basic
AuthUserFile /Users/user/Sites/example/.htpasswd
Require valid-user

# Add the exceptions for matched URL's
Order Deny,Allow
Deny from env=private
Satisfy any

htpasswd 文件应该在 webroot 之上,但为了测试,我将它留在了 webroot 中。 AuthUserFile 行告诉 Apache 在哪里可以找到包含用户名和密码的文件。这必须...必须是绝对路径。我正在使用 relative 并得到 500 个错误。您需要使用终端或其他工具来制作此文件。 http://developer.apple.com/library/Mac/#documentation/Darwin/Reference/ManPages/man1/htpasswd.1.html

结果是该目录需要用户名和密码。现在它将接受我的 htpasswd 文件中的任何有效用户。但是,我可以通过指定特定用户(需要用户 john tim lisa)或组来更改它。

你有它。不使用任何本机 EE 功能,让人们远离特定的模板组。

【讨论】:

    【解决方案2】:

    既然您说您不想绑定到实际的会员帐户,并且可以使用自定义字段来存储可编辑的密码...

    我最近做了类似的事情,使用自定义字段保护一组条目。它类似于此“Password Protected Content Made Simple”文章中概述的方法。但我没有在模板中使用 PHP,而是使用了Mo' Variables。我没有使用 url_title,而是使用了一个自定义字段(下面称为 client_password)。

    此外,我使用Session Variables plugin 来检查用户在后续页面加载时是否已经“登录”,以防止他们不得不一次又一次地输入密码。

    {!-- PASSWORD REQUIRED --}
    {if client_password != ""}
    
        {!-- if passed show content and set session --}
        {if post:password == client_password}
    
            {!-- protected content here --}
            {!-- set session --}
            {embed='embeds/_set_session' entry_id="{entry_id}"}
    
        {!-- if session is valid show content --}
        {if:elseif "{exp:session_variables:get name='logged_in'}" == "{entry_id}"}
    
            {!-- protected content here --}
    
        {!-- if failed show login --}   
        {if:elseif post:password != "" AND post:password != client_password}
    
            <div id="protected">
                <p>Incorrect password. Please try again.</p>
                <br>
                <form action="" method="post">
                    <strong>Password</strong><br />
                    <div>
                        <input name="password">
                    </div>
                    <input type="submit" class="submit" value="submit">
                </form>             
            </div>
    
        {!-- if first attempt show login and prompt --}
        {if:else}
    
            <div id="protected">
                <p>This page is password protected. Please provide the password.</p>
                <br>
                <form action="" method="post">
                    <strong>Password</strong><br />
                    <div>
                        <input name="password">
                    </div>
                    <input type="submit" class="submit" value="submit">
                </form>             
            </div>
    
        {/if}
    
    {!-- NO PASSWORD REQUIRED --}
    {if:else}
    
        {!-- protected content here --}
    
    {/if}
    

    【讨论】:

    • 看起来可能正是我所需要的。我会试一试,让你知道它是如何工作的。
    • 太棒了!很高兴提供更具体的建议或澄清是否有帮助。
    • 你能显示你的 Mo' 变量的内容吗?我的 php 几乎没有达到标准(我正在从设计方面着手)。
    • post Mo' 变量只包含用户在那个简单的登录表单中提交的任何内容,就在名为“密码”的输入中。提交表单时,无论用户输入什么,都会成为 Mo' 变量。在这种情况下,可以作为 {post:password} 访问,我会检查存储在 {client_password} 自定义字段中的密码。
    【解决方案3】:

    您是否考虑过使用Template Access Restrictions 下的HTTP 身份验证选项?它使用会员密码进行身份验证,但不需要会员实际登录。

    你说你“不想使用成员/成员组来管理这个”,但是你想“允许用户直接管理密码”......当然使用内置的成员系统是最简单的方法?

    【讨论】:

    • 我不希望访问者需要会员帐户,但希望内容所有者(拥有会员帐户)可以管理对其内容的访问。 IE他们设置了密码。 HTTP 身份验证的问题在于成员组。这意味着我要么需要所有用户的成员帐户,要么需要所有访问者使用的共享用户帐户来访问内容。在这两种情况下,该成员组中的任何用户帐户都可以访问受此方法保护的任何内容。
    【解决方案4】:

    老实说,我不确定这是否符合您的需求。虽然它不会点击它,但我以前从未尝试过它,并且需要实际试一试以确定它是否适合。

    我会发布它,因为它可能会帮助您或其他人:

    http://koivi.com/ee-entry-auth-dir/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多