<div class="gmail_extra"><div class="gmail_quote">On Wed, Nov 14, 2012 at 1:29 PM,  <span dir="ltr">&lt;<a href="mailto:exarkun@twistedmatrix.com" target="_blank">exarkun@twistedmatrix.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

<div class="im">
</div>This isn&#39;t right.  The point of declaring interfaces on the checker is<br>
so the system knows what kind of credentials it can check.  If your<br>
credentials object implements a different interface than your checker<br>
declares it can check, the system won&#39;t ever ask the checker to check<br>
the credentials.<br></blockquote><div><br>Just to be clear: the thing being checked, i.e. the thing being provided by the user when logging in, is just an IUsernamePassword. Hence, the credentialInterfaces list on the ICredentialsChecker is [IUsernamePassword].<br>

<br>The only place where IUsernameHashedPassword comes in to play is storage, i.e. the thing I am checking the user-provided IUsernamePassword against.<br><br>Maybe code is better: <a href="https://gist.github.com/4072062">https://gist.github.com/4072062</a> (old.py is what it is now, new.py is what I&#39;m proposing)<br>

<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Jean-Paul</blockquote><div> </div><div>cheers</div></div><div>lvh</div><br>
</div>