<meta http-equiv="content-type" content="text/html; charset=utf-8"><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; ">To Christian,<br><br></span><div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; ">I can not found groupfolder.zcml in that folder under <b>.buildout/eggs/zope.pluggableauth-1.0.3-py2.6.egg/zope/pluggableauth/plugins/<br>
</b></span><div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><br></span></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><font class="Apple-style-span" color="#666666">i think you have to include zope.pluggableauth and this zcml-snippet:</font></span></div>
<div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><font class="Apple-style-span" color="#666666"><br></font></span></div><div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><font class="Apple-style-span" color="#666666">&lt;include package=&quot;zope.pluggableauth.plugins&quot; file=&quot;groupfolder.zcml&quot; /&gt;</font></span></div>
<div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><font class="Apple-style-span" color="#666666"><br></font></span></div><div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><font class="Apple-style-span" color="#666666">Maybe you can report if it works for you.</font></span></div>
<div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><font class="Apple-style-span" color="#666666">Christian</font></span></div></blockquote><div><br><div class="gmail_quote">
On Thu, Nov 4, 2010 at 9:30 AM, Shrek Zhou <span dir="ltr">&lt;<a href="mailto:zgwmike@gmail.com">zgwmike@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div>Hi, Jerrfey, </div><div>I did that before I sent the mail. and I noticed that, in .buildout/eggs/zope.app.publication-3.12.0-py2.6.egg/zope/app/publication/zopepublication.py(89), the following func is called, which just get IAuthentication Utility from global site manager.</div>

<div><br></div><div>def beforeTraversal(self, request):</div><div>        notify(StartRequestEvent(request))</div><div>        # Try to authenticate against the root authentication utility.</div><div>        auth = zope.component.getGlobalSiteManager().getUtility(</div>

<div>            zope.authentication.interfaces.IAuthentication)</div><div>        principal = auth.authenticate(request)</div><div>        if principal is None:</div><div>            principal = auth.unauthenticatedPrincipal()</div>

<div>            if principal is None:</div><div>                # Get the fallback unauthenticated principal</div><div>                principal = zope.component.getUtility(</div><div>                    IFallbackUnauthenticatedPrincipal)</div>

<div><br></div><div>        request.setPrincipal(principal)</div><div>        newInteraction(request)</div><div>        transaction.begin()</div><div>ps:</div><div><br></div><b>And code snippet of app.py</b><div><div>class Bada(grok.Application, grok.Container):</div>

<div>    grok.implements(IBada)</div><div class="im"><div>    grok.local_utility(auth.UserAuthenticatorPlugin,</div><div>                       provides=IAuthenticatorPlugin,</div><div>                       name=&#39;users&#39;)</div>
<div>
    grok.local_utility(PluggableAuthentication,provides=IAuthentication,</div><div>                       setup=auth.setup_authentication,</div><div>                       )</div></div><div><b>And code snippet of auth.py</b></div>

<div><div>def setup_authentication(pau):</div><div>    pau.credentialsPlugins=[&#39;credentials&#39;]</div><div>    pau.authenticatorPlugins=[&#39;users&#39;]</div><div><br></div><div>class Account(grok.Model):</div><div>

    def __init__(self,name,password,real_name,role):</div><div>        <a href="http://self.name" target="_blank">self.name</a>=name</div><div>        self.real_name=real_name</div><div>        self.role=role</div><div>        self.setPassword(password)</div>

<div>    def setPassword(self,password):</div><div>        passwordManager=getUtility(IPasswordManager,&#39;SHA1&#39;)</div><div>        self.password=passwordManager.encodePassword(password)</div><div>    def checkPassword(self,password):</div>

<div>        passwordManager=getUtility(IPasswordManager,&#39;SHA1&#39;)</div><div>        return passwordManager.checkPassword(self.password,password)</div><div>class UserFolder(grok.Container):</div><div>    pass</div>
<div>
class MySessionCredentialsPlugin(grok.GlobalUtility,SessionCredentialsPlugin):</div><div>    grok.provides(ICredentialsPlugin)</div><div>    <a href="http://grok.name" target="_blank">grok.name</a>(&quot;credentials&quot;)</div>
<div><br>
</div><div>    loginpagename=&quot;login&quot;</div><div>    loginfield=&#39;login&#39;</div><div>    passwordfield=&#39;password&#39;</div><div><br></div><div>class PrincipalInfo(object):</div><div>    grok.implements(IPrincipalInfo)</div>

<div>    def __init__(self,id,title,description):</div><div>        <a href="http://self.id" target="_blank">self.id</a>=id</div><div>        self.title=title</div><div>        self.description=description</div><div>        self.credentialsPlugin=None</div>

<div>        self.authenticatorPlugin=None</div><div>class UserAuthenticatorPlugin(grok.LocalUtility):</div><div>    grok.implements(IAuthenticatorPlugin)</div><div>    <a href="http://grok.name" target="_blank">grok.name</a>(&#39;users&#39;)</div>

<div><br></div><div>    def __init__(self):</div><div>        self.user_folder=UserFolder()</div><div>    def authenticateCredentials(self,credentials):</div><div>        if not isinstance(credentials,dict):</div><div>            return None</div>

<div>        if not (&#39;login&#39; in credentials and &#39;password&#39; in credentials):</div><div>            return None</div><div>        account=self.getAccount(credentials[&#39;login&#39;])</div><div>        if account is None:</div>

<div>            return None</div><div>        if not account.checkPassword(credentials[&#39;password&#39;]):</div><div>            return None</div><div>        return PrincipalInfo(id=<a href="http://account.name" target="_blank">account.name</a>,</div>

<div>                             title=account.real_name,</div><div>                             description=account.real_name</div><div>                             )</div><div>    def principalInfo(self,id):</div><div>

        account=self.getAccount(id)</div><div>        if account is None:</div><div>            return None</div><div>        return PrincialInfo(id=<a href="http://account.name" target="_blank">account.name</a>,</div><div>
                            title=account.real_name,</div>
<div>                            description=account.real_name</div><div>                            )</div><div>    def getAccount(self,login):</div><div>        return login in self.user_folder and self.user_folder[login] or None</div>

<div>    def addUser(self,username,password,real_name,role,**kwargw):</div><div>        import pdb;pdb.set_trace()</div><div>        if username not in self.user_folder:</div><div>            user=Account(username,password,real_name,role)</div>

<div>            self.user_folder[username]=user</div><div>            role_manager=IPrincipalRoleManager(grok.getSite())            </div><div>            permission_manager=IPrincipalPermissionManager(grok.getSite())</div>

<div>            #TODO: do role or permission assigning here.</div><div>            permission_manager.grantPermissionToPrincipal(&#39;zope.View&#39;,<a href="http://user.name" target="_blank">user.name</a>)</div><div>            </div>
<div>
class ILoginForm(Interface):</div><div>    login=schema.BytesLine(title=_(u&#39;Username&#39;),required=True)</div><div>    camefrom=schema.BytesLine(title=u&#39;&#39;,required=False)</div><div>    password=schema.Password(title=_(u&#39;Password&#39;),required=True)</div>

<div>    </div><div>class Login(megrok.layout.Form):</div><div>    grok.context(Interface)</div><div>    grok.require(&#39;zope.Public&#39;)</div><div>    label=&#39;Login&#39;</div><div>    prefix=&#39;&#39;</div><div>    form_fields=grok.Fields(ILoginForm)</div>

<div><br></div><div>    def setUpWidgets(self,ignore_request=False):</div><div>        super(Login,self).setUpWidgets(ignore_request)</div><div>        self.widgets[&#39;camefrom&#39;].type=&#39;hidden&#39;</div><div>        self.widgets[&#39;login&#39;].cssClass=&#39;title&#39;</div>

<div>        self.widgets[&#39;password&#39;].cssClass=&#39;title&#39;</div><div>        </div><div>    @grok.action(&#39;Login&#39;)</div><div>    def handle_login(self,**data):</div><div>        import pdb;pdb.set_trace()</div>

<div>        self.redirect(self.request.form.get(&#39;camefrom&#39;,self.url(grok.getSite())))</div><div>        </div><div>class IAddUserForm(Interface):</div><div>    login=schema.BytesLine(title=_(u&quot;Username&quot;),required=True)</div>

<div>    password=schema.Password(title=_(u&#39;Password&#39;),required=True)</div><div>    confirm_password=schema.Password(title=_(u&quot;Confirm password&quot;),</div><div>                                     required=True)</div>

<div>    real_name=schema.TextLine(title=_(u&#39;Real name&#39;),required=True)</div><div>    role=schema.Choice(title=_(u&#39;User role&#39;),</div><div>                       values=[_(u&#39;Bada Member&#39;),_(u&#39;Bada Master Account&#39;)],</div>

<div>                       required=True)</div><div><br></div><div>class AddUserForm(megrok.layout.Form):</div><div>    grok.context(Interface)</div><div>    grok.require(&#39;zope.Public&#39;)</div><div>    label=_(&#39;Register&#39;)</div>

<div>    form_fields=grok.Fields(IAddUserForm)</div><div>    @grok.action(_(u&#39;Register&#39;))</div><div>    def handle_add(self,**data):</div><div>        users=getUtility(IAuthenticatorPlugin,&#39;users&#39;)</div><div>

        users.addUser(data[&#39;login&#39;],data[&#39;password&#39;],data[&#39;real_name&#39;],data[&#39;role&#39;])</div><div>        self.redirect(self.url(grok.getSite()))</div></div><div><div></div><div class="h5"><div>
<br></div><div class="gmail_quote">
On Thu, Nov 4, 2010 at 1:49 AM, Jeffrey D Peterson <span dir="ltr">&lt;<a href="mailto:bgpete@gmail.com" target="_blank">bgpete@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">










<div lang="EN-US" link="blue" vlink="purple">

<div>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">There is a bug, it’s been documented.  </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">You need to include zope.pluggableauth in your setup.py in
install_requires and rerun buildout.  This will work around the bug.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Hopefully that’s the issue, otherwise, we’ll have to look
closer.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">--</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Jeffrey Peterson</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"><a href="mailto:bgpete3@gmail.com" target="_blank">bgpete3@gmail.com</a></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">

<div>

<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">

<p class="MsoNormal"><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt">
<a href="mailto:grok-dev-bounces@zope.org" target="_blank">grok-dev-bounces@zope.org</a> [mailto:<a href="mailto:grok-dev-bounces@zope.org" target="_blank">grok-dev-bounces@zope.org</a>] <b>On Behalf Of </b>Shrek
Zhou<br>
<b>Sent:</b> Wednesday, November 03, 2010 12:01 PM<br>
<b>To:</b> <a href="mailto:grok-dev@zope.org" target="_blank">grok-dev@zope.org</a><br>
<b>Subject:</b> [Grok-dev] grok 1.2 and session based auth.</span></p>

</div>

</div><div><div></div><div>

<p class="MsoNormal"> </p>

<div>

<p class="MsoNormal">hi, grokkers,</p>

</div>

<div>

<p class="MsoNormal"> </p>

</div>

<div>

<p class="MsoNormal"><b>My problem:</b></p>

</div>

<div>

<p class="MsoNormal">I can not use PluggableAuthenticationPlugin from
zope.pluggableauth to do a session based auth.</p>

</div>

<div>

<p class="MsoNormal"> </p>

</div>

<div>

<p class="MsoNormal"><b>Steps I took:</b></p>

</div>

<div>

<p class="MsoNormal">1. added the following lines to my gork.Application:</p>

</div>

<div>

<p class="MsoNormal"> </p>

</div>

<div>

<p class="MsoNormal">  
 grok.local_utility(auth.UserAuthenticatorPlugin,</p>

</div>

<div>

<p class="MsoNormal">              
        provides=IAuthenticatorPlugin,</p>

</div>

<div>

<p class="MsoNormal">              
        name=&#39;users&#39;)</p>

</div>

<div>

<p class="MsoNormal">  
 grok.local_utility(PluggableAuthentication,provides=IAuthentication,</p>

</div>

<div>

<p class="MsoNormal">              
        setup=auth.setup_authentication,</p>

</div>

<div>

<p class="MsoNormal">              
        )</p>

</div>

<div>

<p class="MsoNormal"> </p>

<div>

<p class="MsoNormal">2. created corresponding authenticatorPlugin and
credentialsPlugin, and add them to pau through setup_authentication.</p>

</div>

</div>

<div>

<p class="MsoNormal"> </p>

</div>

<div>

<p class="MsoNormal"><b>Results</b>:</p>

</div>

<div>

<p class="MsoNormal">The authentication utility is not called at all. only
princialRegistry(from zope.principalregistry which is a globalsite utility that
implements IAuthentication.) works.</p>

</div>

<div>

<p class="MsoNormal"> </p>

</div>

<div>

<p class="MsoNormal">Expected:</p>

</div>

<div>

<p class="MsoNormal">The local authentication utility should work
and substitute the global one.</p>

</div>

<div>

<p class="MsoNormal"> </p>

</div>

<div>

<p class="MsoNormal"><b><u>How can I fix the above problem??</u></b> </p>

</div>

<div>

<p class="MsoNormal"> </p>

</div>

</div></div></div>

</div>

</div>


</blockquote></div><br></div></div></div>
</blockquote></div><br></div></div>