Login with Quarters
In this short guide, you'll learn how to add Login with Quarters
and how to
retrieve player details. We are going to use OAuth for authentication. If you
want to know more about how OAuth works, check out
Digital Ocean's tutorial.
Now, let's create simple login functionality and fetch user information from Quarters server. This example uses node server to validate OAuth generated code.
Let's start with client side. First add Quarters JavaScript SDK
in index.html
:
<script src='https://raw.githubusercontent.com/weiks/quarters-js/master/lib/Quarters.min.js'></script>
Create client using app id
and web secret
like this:
var quarterOptions = { appId: <APP_ID>, appKey: <APP_KEY>, quartersURL: 'https://pocketfulofquarters.com', apiURL: 'https://api.pocketfulofquarters.com/v1/' } var client = new Quarters(quarterOptions);
Once user click on login button you can authorize
with iframe
. Authorizing
with user generates temporary code
which you can use to generate
refresh_token
.
After receiving refresh_token
, you can set refresh_token
to
setRefreshToken
SDK API.
client.authorize('iframe', function(data) { var code = data.code // send this code to our node server to validate and generate refresh_token // set refresh_token to client client.setRefreshToken(refresh_token).then(function() { // start using client object to fetch user details }) })
Once you have set refresh_token
to client
, you can now use client
object
to fetch user details, create transfer request, etc...
Fetch user:
client.me().then(function(user) { // Use user object })
Let's now work on server side. This guide uses express framework for Node server.
# Install node SDK
npm install --save node-quarters
Create quartersClient
on server. This uses app secret
(Server API key), not
app web secret
.
// Create quarters client var quartersClient = new Quarters({ appId: <APP_ID>, appKey: <APP_KEY>, serverAPIKey: <SERVER_API_KEY>, address: <APP_ETH_ADDRESS>, quartersURL: 'https://pocketfulofquarters.com', apiURL: 'https://api.pocketfulofquarters.com/v1/' });
Create POST
route
in express
app to generate refresh token using OAuth
generated code
.
// POST route quartersClient.createRefreshToken(code).then(function(data) { // get refresh_token (and access_token) and return to UI // data.refresh_token // data.access_token // you can use access_token to fetch user details // quartersClient.fetchUser(access_token) })
Example
Here is full example.
Client
index.html
Add Javscript SDK
and add login button into index.html
.
<!DOCTYPE html> <html> <head> .... </head> <body> .... <button onclick="login()">Login with Quarters</button> .... </body> <!-- jQuery --> <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script> <!-- Quarters javascript SDK --> <script src='https://raw.githubusercontent.com/weiks/quarters-js/master/lib/Quarters.min.js'></script> <!-- index.js file --> <script src="index.js" charset="utf-8"></script> </html>
index.js
var quarterOptions = { appId: <APP_ID>, appKey: <APP_KEY>, quartersURL: 'https://pocketfulofquarters.com', apiURL: 'https://api.pocketfulofquarters.com/v1/' } var client = new Quarters(quarterOptions); // // On click login // var login = function () { // authorize user to quarters using iframe client.authorize('iframe', function(data) { if (data.code) { // fetch refresh token using code $.ajax({ url: '/code', method: 'POST', data: JSON.stringify({code: data.code}), contentType: 'application/json', dataType: 'json' }).then(function(res) { // res.refresh_token => you can store into local-storage or cookies // set refresh token to quarters client return client.setRefreshToken(res.refresh_token); }).then(function() { // fetch user details return fetchUserDetails(); }).catch(function(e) { console.log(e); }); } }) } // Fetch user details using client after setting refresh_token var fetchUserDetails = function () { return client.me().then(function(user) { console.log(user); }); }
Server (Node.js)
Install Node SDK
npm install --save node-quarters
app.js
var Quarters = requrie('node-quarters'); var express = require('express'); var app = express(); // Create quarters client var quartersClient = new Quarters({ appId: <APP_ID>, appKey: <APP_KEY>, address: <APP_ETH_ADDRESS>, quartersURL: 'https://pocketfulofquarters.com', apiURL: 'https://api.pocketfulofquarters.com/v1/' }); ... ... // POST method route app.post('/code', function (req, res) { var code = req.body.code; // create refresh token for user and fetch user return quartersClient .createRefreshToken(code) .then(function (data) { // get refresh_token var refresh_token = data.refresh_token; // get access_token var access_token = data.access_token; // fetch user using access token // quartersClient.fetchUser(access_token); // return tokens to UI return res.json({ access_token: access_token, refresh_token: refresh_token }); }) .catch(function (e) { return res.status(400).json({ message: e.message }) }); });