Facebook Sign-in using Clojure
source link: https://blog.knoldus.com/facebook-sign-in-using-clojure/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Facebook Sign-in using Clojure
Reading Time: 2 minutes
In order to provide Facebook sign-in functionality you need to create a new Facebook App from this url: https://developers.facebook.com/docs/facebook-login. Provide the redirection URI that you’ll use for the App. After setting up the app you’ll get an App ID and App Secret key.
We’ll use “clj-oauth2.client” to redirect a user to the authentication page, “clj-http.client” for HTTP requests, “cheshire.core” to parse Json string in order to get keywords, “noir.respose” to provide re-directions and “compojure.core” for routing.
We’ll begin with defining a new namespace:
xxxxxxxxxx
(ns exampleapp.routes.facebook
(:use compojure.core)
(:require [clj-oauth2.client :as oauth2]
[noir.response :as resp]
[clj-http.client :as client]
[cheshire.core :as parse]))
In facebook namespace define an atom, facebook-user, to store Facebook user details:
xxxxxxxxxx
(def facebook-user
(atom {:facebook-id "" :facebook-name "" :facebook-email ""}))
Now include the App ID and App Secret key you just got after creating a new Facebook app along with the redirection URI, in the code below:
xxxxxxxxxx
(def APP_ID "your app id")
(def APP_SECRET "your app secret key")
(def REDIRECT_URI "http://localhost:3000/auth_facebook")
and define an oauth2 map containing all the details required for Facebook log in:
xxxxxxxxxx
(def facebook-oauth2
{:authorization-uri "https://graph.facebook.com/oauth/authorize"
:access-token-uri "https://graph.facebook.com/oauth/access_token"
:redirect-uri REDIRECT_URI
:client-id APP_ID
:client-secret APP_SECRET
:access-query-param :access_token
:scope ["email"]
:grant-type "authorization_code"})
We can use “make-auth-request” function defined in “clj-oauth2.client” library to get the redirect URI on which the user should be redirected. The user can now give access to the app we created in first step.
xxxxxxxxxx
(resp/redirect
(:uri (oauth2/make-auth-request facebook-oauth2)))
Note that we used noir.response/redirect function to provide the redirection.
After a Facebook user grant access to the app, we’ll get a response containing access token on the redirection URI we provided while setting up our Facebook app. We’ll use “compojure.core’s” GET to get the response:
xxxxxxxxxx
(defroutes facebook-routes
(GET "/auth_facebook" {params :query-params} (facebook params)))
and pass it to a function in order to get the access token and user details.
We’ll use the code below for getting access token and user details:
xxxxxxxxxx
(defn facebook [params]
(let [access-token-response (:body (client/get (str "https://graph.facebook.com/oauth/access_token?"
"client_id=" APP_ID
"&redirect_uri=" REDIRECT_URI
"&client_secret=" APP_SECRET
"&code=" (get params "code"))))
access-token (get (re-find #"access_token=(.*?)&expires=" access-token-response) 1)
user-details (-> (client/get (str "https://graph.facebook.com/me?access_token=" access-token))
:body
(parse/parse-string))]
(swap! facebook-user
#(assoc % :facebook-id %2 :facebook-name %3 :facebook-email %4)
(get user-details "id")
(get user-details "first_name")
(get user-details "email"))))
Recommend
-
30
We atAjira successfully delivered our first project in Clojure recently. It was an impressive outing for the last eight weeks! We were able to deliver some complex features...
-
6
Manipulating the DOM with Clojure using Klipse Sep 10, 2020 • Yehonathan Sharvit The Klipse plugin is a client-side
-
7
Using SendGrid with Clojure in The Next Web HackBattle24 Apr 2014 This week is The Next Web conference in Amsterdam, where I participated in the
-
8
Linkedin sign-in functionality using Clojure Reading Time: 2 minutesThis blog will show you how to add Linkedin sign in fu...
-
2
Google Sign-In using Clojure Reading Time: 2 minutesLast time I wrote an article for providing Facebook Sign-In using Clojure. This...
-
13
Sign-Up with Facebook, Twitter and Google using Node.js and MongoDB Reading Time: < 1 minuteLast week, we created a simple login application, which has sign up and login facility after successfully registrati...
-
5
Connect with friends and the world around you on Facebook.
-
3
Facebook’s famous thumbs-up HQ sign has been replaced with Meta New name, new sign By
-
1
-
5
You can now sign up for your share of Facebook's $725 million privacy settlement...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK