Along the lines of automatically starting of the OpenID workflow: is there a nicer solution than patching https://github.com/cemerick/friend/blob/master/src/cemerick/friend/openid.clj#L108 to work with a redirect (hence GET would be needed) and pass in the identifier either as url-arg or as param for the workflow?
On Thursday, 20 December 2012 23:34:49 UTC+1, Chas Emerick wrote: > > Yes; see the friend/identity and friend/current-authentication functions. > > - Chas > > On Dec 20, 2012, at 2:15 PM, Murtaza Husain wrote: > > > I think this seems to be the one - Under :session and the following key > :cemerick.friend/identity there is - :identity > https://www.google.com/accounts/o8/id?id=AItOawlvddewdedwddrft56gt > > Thanks, > Murtaza > > On Thursday, December 20, 2012 11:56:53 PM UTC+5:30, Murtaza Husain wrote: >> >> Hi, >> >> Once the user is authenticated, how do I get hold of unique user >> identifier that was returned by openid provider. >> >> I would like persist this user identifier with the user's authorization >> details into the DB. >> >> Murtaza >> >> On Thursday, December 20, 2012 8:06:04 PM UTC+5:30, Murtaza Husain wrote: >>> >>> Chas, >>> >>> It was the header being sent. A form post sends data as url encoded, >>> with header as url encoded form data, while the javascript library was >>> posting data as application/json, that is the reason it was failing. Also >>> thanks for the pointer on realm. >>> >>> Thanks, >>> Murtaza >>> >>> >>> On Thursday, December 20, 2012 4:03:19 PM UTC+5:30, Chas Emerick wrote: >>>> >>>> Your Clojure code is correct. However, whatever you're using to >>>> produce the POST to /openid (i.e. this 'ng-click="signin('google')"' >>>> stuff) >>>> isn't behaving as you're expecting. I didn't dig into what it's actually >>>> doing, but a simple form posting to /openid starts that workflow with >>>> Google without a problem: >>>> >>>> diff --git a/public/landing.html b/public/landing.html >>>> index 68c4618..88bfa59 100644 >>>> --- a/public/landing.html >>>> +++ b/public/landing.html >>>> @@ -94,7 +94,10 @@ >>>> >>>> <hr class="soften"> >>>> >>>> - >>>> + <form method="POST" action="/openid"> >>>> + <input type="hidden" name="identifier" value=" >>>> https://www.google.com/accounts/o8/id"/> >>>> + <input type="submit" value="login with google"/> >>>> + </form> >>>> </div> >>>> >>>> Note that the :realm you provide to OpenId needs to correspond to the >>>> domain that the site is running on; so, locally, you'll have to set that >>>> to >>>> e.g. http://localhost:8080, and then to http://mydomainname.com in >>>> production, etc. >>>> >>>> - Chas >>>> >>>> On Dec 19, 2012, at 9:56 PM, Murtaza Husain wrote: >>>> >>>> >>>> I have changed the parameter name to 'identifier', however I am still >>>> hitting the NPE, any ideas? >>>> >>>> I have placed the code on github - >>>> https://github.com/murtaza52/cfaiz.git, if you would like to take a >>>> look. >>>> >>>> Thanks, >>>> Murtaza >>>> >>>> On Thursday, December 20, 2012 12:12:27 AM UTC+5:30, Chas Emerick wrote: >>>>> >>>>> The parameter name is 'identifier' (not 'openid_identifier') by >>>>> default (which you can customize if you want by specifying a >>>>> :user-identifier-param option in openid/workflow). >>>>> >>>>> That said, the NPE you just hit has drawn my attention to an >>>>> (unrelated) bug in the openid workflow. Thanks! :-) >>>>> >>>>> - Chas >>>>> >>>>> On Dec 19, 2012, at 1:20 PM, Murtaza Husain wrote: >>>>> >>>>> >>>>> Thanks for catching that Aaron ! >>>>> >>>>> The app currently redirects to the login page now. However I get an >>>>> error when I try to post to the "/openid" url with >>>>> {"openid_identifier":"https://www.google.com/accounts/o8/id"} as post >>>>> data. >>>>> >>>>> Here is the updated code - >>>>> >>>>> (ns faiz.handler >>>>> (:use compojure.core) >>>>> (:require [compojure.handler :as handler] >>>>> [compojure.route :as route] >>>>> [ring.util.response :as resp] >>>>> [me.shenfeng.mustache :as mustache] >>>>> [cemerick.friend :as friend] >>>>> (cemerick.friend [workflows :as workflows] >>>>> [credentials :as creds] >>>>> [openid :as openid]))) >>>>> >>>>> (mustache/deftemplate index (slurp "public/index-async.html")) >>>>> >>>>> (def index-data {:title "Invoize." :brand "Faiz" :links [{:url >>>>> "#/students" :text "Students"} {:url "#/thaalis" :text "Thaalis"}]}) >>>>> >>>>> (defroutes app-routes >>>>> (GET "/" [] (resp/redirect "/login")) >>>>> (ANY "/login" [] (resp/file-response "landing.html" {:root >>>>> "public"})) >>>>> (GET "/landing" [] (resp/file-response "landing.html" {:root >>>>> "public"})) >>>>> (GET "/index" [] (friend/authenticated (index index-data))) >>>>> (route/files "/" {:root "public"}) >>>>> (route/not-found "Not Found")) >>>>> >>>>> (def app-routes-with-auth >>>>> (-> app-routes >>>>> (friend/authenticate >>>>> {:workflows [(openid/workflow :openid-uri "/openid" :realm " >>>>> http://invoize.com" :credential-fn identity)]}))) >>>>> >>>>> (def app >>>>> (handler/site app-routes-with-auth)) >>>>> >>>>> >>>>> Below is the stacktrace - >>>>> >>>>> java.lang.NullPointerExceptionopenid.clj:124 >>>>> cemerick.friend.openid/workflow[fn]friend.clj:174 >>>>> cemerick.friend/authenticate*[fn]core.clj:2432clojure.core/map[fn] >>>>> LazySeq.java:42clojure.lang.LazySeq.sval >>>>> >>>>> Thanks, >>>>> Murtaza >>>>> >>>>> >>>>> >>>>> >>>>> On Wednesday, December 19, 2012 7:37:04 PM UTC+5:30, Aaron Cohen wrote: >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Wed, Dec 19, 2012 at 8:40 AM, Murtaza Husain < >>>>>> murtaza...@sevenolives.com> wrote: >>>>>>> >>>>>>> (defroutes app-routes >>>>>>> (GET "/" [] (resp/redirect "/landing")) >>>>>>> (GET "/landing" [] (resp/file-response "landing.html" {:root >>>>>>> "public"})) >>>>>>> (GET "/index" [] (index index-data)) >>>>>>> (route/files "/" {:root "public"}) >>>>>>> (route/not-found "Not Found")) >>>>>>> >>>>>>> (def mock-app >>>>>>> (-> app-routes >>>>>>> (friend/authenticate >>>>>>> {:allow-anon? false >>>>>>> :login-uri? "/landing" >>>>>>> :workflows [(openid/workflow :openid-uri "/openid" :realm " >>>>>>> http://invoize.com")]}))) >>>>>>> >>>>>>> >>>>>> >>>>>> I'm not fully conversant with all the libraries, but don't you >>>>>> actually need to use mock-app somewhere? >>>>>> >>>>>> >>>>>>> (def app >>>>>>> (handler/site app-routes)) >>>>>>> >>>>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Clojure" group. >>>>> To post to this group, send email to clo...@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+u...@googlegroups.com >>>>> For more options, visit this group at >>>>> http://groups.google.com/group/clojure?hl=en >>>>> >>>>> >>>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Clojure" group. >>>> To post to this group, send email to clo...@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+u...@googlegroups.com >>>> For more options, visit this group at >>>> http://groups.google.com/group/clojure?hl=en >>>> >>>> >>>> > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clo...@googlegroups.com <javascript:> > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+u...@googlegroups.com <javascript:> > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > > > -- 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