On Sunday, October 28, 2012 9:56:35 PM UTC, Patrik Sundberg wrote:
>
> On Sunday, October 28, 2012 8:14:41 PM UTC, Chas Emerick wrote:
>
>> On Oct 28, 2012, at 2:57 PM, Patrik Sundberg wrote:
>>
>> I've looked at this for a bit now. It seems there are some slight 
>> inconsistencies in how the redirect info is used:
>>
>> Where the redirect-on-autth? is being set up for the interactive-form 
>> workflow it looks to me to be assumed to be a boolean flag.
>>
>> https://github.com/sundbp/friend/blob/master/src/cemerick/friend/workflows.clj#L79
>>
>> At that point it's given as an argument when setting up the workflow 
>> (defaulting to true). 
>>
>> Then when it's being used in the generic code it's first picked out - 
>> looking like boolean flag still:
>> https://github.com/sundbp/friend/blob/master/src/cemerick/friend.clj#L145
>>
>> but then all of a sudden assumed to be a string containing the url to 
>> redirect to:
>> https://github.com/sundbp/friend/blob/master/src/cemerick/friend.clj#L149
>>
>> Given that, for the interactive-form workflow, it can only be set at the 
>> time of creating the workflow, it seems impossible to actually achieve the 
>> flow where friend "remembers" which page under authentication that user 
>> tried to access, then do auth, and finally return user to the originally 
>> requested page in a dynamic fashion. Since given at workflow creation time 
>> it can't dynamically reflect things properly I'd have assumed. I'd have 
>> expected it to not be an argument at workflow creation time, but the 
>> originally requested url being dynamically kept track of at the point 
>> friend realizes it needs to redirect the user to do authentication, then 
>> that url being used on L149 up there when the workflow sets 
>> redirect-on-auth? to true.
>>
>> Am I misunderstanding the flow or is there a mixup here? The tests only 
>> tests for boolean state, not as a string url.
>>
>>
>> You're misunderstanding.  If ::redirect-on-auth? is any truthy value 
>> (which includes strings), then `redirect-new-auth` will either:
>>
>> (a) send a redirect to the ::unauthorized-uri as captured in the session, 
>> which is only ever set if the user previously requested a resource for 
>> which they were not authorized (see 
>> https://github.com/cemerick/friend/blob/master/src/cemerick/friend.clj#L200),
>>  
>> or
>>
>> (b) redirect to the value of ::redirect-on-auth? if it is a string, or
>>
>> (c) redirect to the :default-landing-url specified in the configuration 
>> provided to `authenticate`.
>>
>> You're right that (b) will never be the case for the interactive-form 
>> workflow, fundamentally because `cemerick.friend.workflows/make-auth` 
>> merges the `auth-meta` defaults in last, rather than first.  That's a valid 
>> point of enhancement; ticket/patch welcome. :-)
>>
>> Note that ::redirect-on-auth? _is_ poorly named: it was originally 
>> expected to only be a boolean, thus the '?'.  Its name will need to change 
>> in the future to reflect its actual role.
>>
>>
> Ok - I think that's actually what my understanding was :) It just seemed 
> that in the existing workflows if it is stringy (assume make-auth patched 
> although I didn't quite get that yet) it is a fixed string rather than a 
> dynamic value of the url user tried to access. I.e. I can give "/foo" as 
> redirect-on-auth? when setting up the interactive-form workflow, but that's 
> then a fixed url to redirecct to. To redirect to whatever page the user 
> tried to access I'd have thought we need store it away from the original 
> request before we go into the auth process, to later redirect back to it 
> once successfully authenticated.
>
>
Reading the code again I now get it. The redirection I was looking for is 
there. ::unauthorized-uri is the uri I was looking for, misinterpreted the 
name to mean something else and overlooked it. I see how it fits together 
now. Will try to get to making the changes that came up in this discussion 
sometime this week.
 
Thanks

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to