ajonnet

generate parse session token from google id token

Apr 7th, 2016
323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function getRandomString()
  2.  
  3. {
  4.     var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ";
  5.     var string_length = 10;
  6.     var randomstring = '';
  7.  
  8.     for (var i=0; i<string_length; i++) {
  9.         var rnum = Math.floor(Math.random() * chars.length);
  10.         randomstring += chars.substring(rnum,rnum + 1);
  11.     }
  12.     return randomstring;
  13. }
  14.  
  15. Parse.Cloud.define("getSessionToken", function(request, response) {
  16.     //console.log(request);
  17.     //console.log(request.params.accessToken);
  18.     //console.log(request.params.GClientId);
  19.     Parse.Cloud.useMasterKey();
  20.    
  21.     //Verifying token (id Token)
  22.     var authTokenVerificationURL = "https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=" + request.params.idToken;
  23.     //console.log(authTokenVerificationURL);
  24.     Parse.Cloud.httpRequest({
  25.         url:authTokenVerificationURL
  26.     }).then(function(httpResponse){
  27.         //Success
  28.         //console.log("success httpResponse: " + httpResponse.text);
  29.        
  30.         //Verify if token is generated from our client
  31.         var gAudience = httpResponse.data.aud;
  32.         if(gAudience == request.params.GClientId) {
  33.             console.log("Verified: Token is generated from our app");
  34.        
  35.             var user_emailId = httpResponse.data.email;
  36.             //console.log(user_emailId);
  37.            
  38.             //Check if User account exists for the emailId
  39.             var query = new Parse.Query(Parse.User);
  40.             query.equalTo("email",user_emailId);
  41.             query.first({
  42.                 success: function(user) {
  43.                    
  44.                     if(user) {
  45.                         console.log("User found with Username: " + user.getUsername() + ", objectId: " + user.id);
  46.                        
  47.                         //Generate the Session Token
  48.                         var sessionToken = user.getSessionToken();
  49.                         if(sessionToken) {
  50.                             console.log("SessionToken: " + sessionToken);
  51.                             response.success(sessionToken);
  52.                         }else {
  53.                             console.log("Unable to generate session token");
  54.                             response.error('Unable to generate Session Token');
  55.                         }
  56.  
  57.                     }else {
  58.                         console.log("User not found, Creating new account for user with emailId: " + user_emailId);
  59.                        
  60.                         //Create New Account
  61.                         var nUser = new Parse.User();
  62.                         nUser.set("username",user_emailId);
  63.                         nUser.set("password",getRandomString());
  64.                         nUser.set("email",user_emailId);
  65.                         nUser.signUp(null,{
  66.                             success: function(user) {
  67.                                 console.log("New account created for user with emailID: " + user_emailId);
  68.                                                        
  69.                                 //Generate the Session Token
  70.                                 var sessionToken = user.getSessionToken();
  71.                                 console.log("SessionToken: " + sessionToken);
  72.                                 response.success(sessionToken);
  73.                             },
  74.                             error: function(user, error) {
  75.                                 console.log("Failed to create a new account for emailID: " + user_emailId);
  76.                                 console.log("User: " + user + ", Error: " + error);
  77.                                 response.error(error);
  78.                             }
  79.                         });
  80.                     }
  81.                    
  82.                    
  83.                 },
  84.                 error: function(user, error) {
  85.                     console.log("Query to fetch user failed");
  86.                     console.log("User: " + user + ", Error: " + error);;
  87.                    
  88.                     response.error(error); 
  89.                 },
  90.                 userMasterKey:true
  91.             });
  92.            
  93.            
  94.            
  95.         }else { //Client has not login from our app
  96.             console.log("Google AudienceID: " + gAudience + "\n AppClientId: " + request.params.GClientId);
  97.             response.error('Invalid Audience');
  98.         }
  99.        
  100.     },function(httpResponse) {
  101.         //Error
  102.         console.log("Failed httpResponse: " + httpResponse.text);
  103.         console.error('Request Failed with response code' + httpResponse.status);
  104.         response.error('Failed to verify access token');
  105.     });
  106.  
  107. });
Add Comment
Please, Sign In to add comment