<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"><include package="zope.pluggableauth.plugins" file="groupfolder.zcml" /></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"><<a href="mailto:zgwmike@gmail.com">zgwmike@gmail.com</a>></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='users')</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=['credentials']</div><div> pau.authenticatorPlugins=['users']</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,'SHA1')</div><div> self.password=passwordManager.encodePassword(password)</div><div> def checkPassword(self,password):</div>
<div> passwordManager=getUtility(IPasswordManager,'SHA1')</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>("credentials")</div>
<div><br>
</div><div> loginpagename="login"</div><div> loginfield='login'</div><div> passwordfield='password'</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>('users')</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 ('login' in credentials and 'password' in credentials):</div><div> return None</div><div> account=self.getAccount(credentials['login'])</div><div> if account is None:</div>
<div> return None</div><div> if not account.checkPassword(credentials['password']):</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('zope.View',<a href="http://user.name" target="_blank">user.name</a>)</div><div> </div>
<div>
class ILoginForm(Interface):</div><div> login=schema.BytesLine(title=_(u'Username'),required=True)</div><div> camefrom=schema.BytesLine(title=u'',required=False)</div><div> password=schema.Password(title=_(u'Password'),required=True)</div>
<div> </div><div>class Login(megrok.layout.Form):</div><div> grok.context(Interface)</div><div> grok.require('zope.Public')</div><div> label='Login'</div><div> prefix=''</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['camefrom'].type='hidden'</div><div> self.widgets['login'].cssClass='title'</div>
<div> self.widgets['password'].cssClass='title'</div><div> </div><div> @grok.action('Login')</div><div> def handle_login(self,**data):</div><div> import pdb;pdb.set_trace()</div>
<div> self.redirect(self.request.form.get('camefrom',self.url(grok.getSite())))</div><div> </div><div>class IAddUserForm(Interface):</div><div> login=schema.BytesLine(title=_(u"Username"),required=True)</div>
<div> password=schema.Password(title=_(u'Password'),required=True)</div><div> confirm_password=schema.Password(title=_(u"Confirm password"),</div><div> required=True)</div>
<div> real_name=schema.TextLine(title=_(u'Real name'),required=True)</div><div> role=schema.Choice(title=_(u'User role'),</div><div> values=[_(u'Bada Member'),_(u'Bada Master Account')],</div>
<div> required=True)</div><div><br></div><div>class AddUserForm(megrok.layout.Form):</div><div> grok.context(Interface)</div><div> grok.require('zope.Public')</div><div> label=_('Register')</div>
<div> form_fields=grok.Fields(IAddUserForm)</div><div> @grok.action(_(u'Register'))</div><div> def handle_add(self,**data):</div><div> users=getUtility(IAuthenticatorPlugin,'users')</div><div>
users.addUser(data['login'],data['password'],data['real_name'],data['role'])</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"><<a href="mailto:bgpete@gmail.com" target="_blank">bgpete@gmail.com</a>></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='users')</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>