2011-07-15 14 views
8

जिस तरह से मैं Google खातों का उपयोग करके ऐपइंजिन में अपने उपयोगकर्ताओं को प्रमाणीकृत कर सकता हूं, वह बस अद्भुत है।Google AppEngine: कस्टम प्रमाणीकरण

हालांकि, मुझे अपने कस्टम प्रमाणीकरण-लॉगिन सिस्टम का उपयोग करने की आवश्यकता है।

मेरे पास उपयोगकर्ता नाम और एन्क्रिप्टेड पासवर्ड के साथ एक AppUsers तालिका होगी।

मैंने जीए पर सत्रों के बारे में कुछ पढ़ा, लेकिन मुझे अपनी ऐप सुरक्षा शुरू करने में मदद की ज़रूरत है।

मैं अपने प्रमाणित उपयोगकर्ता सत्र को कैसे ट्रैक कर सकता हूं? एक कुकी सेट करना?

एक शुरुआत।

+0

आवश्यक आप शायद एक टैग जो क्रम के लिए आप (अजगर/जावा) का उपयोग कर रहे सही भीड़ खींचने के लिए जोड़ना चाहिए। और फ्रेमवर्क पर एक नज़र डालें जो –

+0

चीजों के सत्र पक्ष के साथ आपकी मदद कर सकती है ऐप इंजन के लिए सत्र पुस्तकालय हैं - आप किस बारे में अनिश्चित हैं? –

उत्तर

6

आप ऐसा करने के लिए कुकी का उपयोग कर सकते हैं ... यह वास्तव में इतना कठिन नहीं है। आप उपयोगकर्ता के प्रमाणीकृत ट्रैक करने के लिए कुकी का उपयोग कर सकते हैं और सत्र कुंजी को gae datastore में संग्रहीत कर सकते हैं।

एक उदाहरण नहीं है (यह सिर्फ मूल विचार दिखाने के लिए, मैं गारंटी नहीं है कोड सीधे इस्तेमाल किया जा सकता है)

बेसिक उपयोगकर्ता तालिका:

# simply add an property to store the session key 
class User(db.Model):  
    username = db.StringProperty() 
    password = db.StringProperty() 
    session = db.StringProperty() 

लॉग इन समारोह

# Do the following step: 
# 1. make sure user provide correct username and password 
# 2. generate a random session key 
# 3. store the session key to datastore 
# 4. set the session key and user name in cookie 
class LoginAPI(Webapp.RequestHandler): 
    def get(self): 
     username = self.getVar('username', username) 
     password = self.getVar('password', password) 

     user = User.all().filter("username = ", username).get() 
     password = encrypted_the_password(password) # encrypted your password with your own method! 

     if user.password == password: 
      # User login successfually 
      session = generate_random_session_key() # generate your session key here 
      user.session = session 
      user.put() 

      expires_time = decide_your_expires_time() # decide how long the login session is alive. 
      cookie_time_format = "%a, %d-%b-%Y %H:%M:%S GMT" 
      expires_datetime = datetime.datetime.fromtimestamp(expires_time) 

      # set cookie as session 
      self.response.headers.add_header("Set-Cookie", "user=%s; expires=%s; path=/" % (user.username,expires_datetime.strftime(cookie_time_format))) 
      self.response.headers.add_header("Set-Cookie", "session=%s; expires=%s; path=/" % (user.session, expires_datetime.strftime(cookie_time_format))) 
     else: 
      #User login failed 
      pass 

लॉगआउट समारोह

# Remove the previous cookie info 
class LoginAPI(Webapp.RequestHandler): 
     def get(self): 
      # remove the cookie 
      self.response.headers.add_header("Set-Cookie", "user=%s; expires=%s; path=/" % ("",expires_datetime.strftime(cookie_time_format))) 
      self.response.headers.add_header("Set-Cookie", "session=%s; expires=%s; path=/" % ("", expires_datetime.strftime(cookie_time_format))) 

जब आप उपयोगकर्ता लॉगिन

# Get the session info from cookie. If the session info match the info stored in datastore 
# Then user authenticate successfully. 
class SomePage(Webapp.RequestHandler): 
    def get(self): 
     # get cookie info 
     username_from_cookie = self.request.cookies.get("user", "") 
     session_from_cookie = self.request.cookies.get("session", "") 

     if username_from_cookie and session_from_cookie: 
      user = User.all().filter("username = ", username_from_cookie).get() 
      if user.session == session_from_cookie: 
       # the user is login correctly 
       pass 
      else: 
       # the user is not login 
       pass 
     else: 
      # the user is not login 
      pass 
+1

वास्तव में पहिया को फिर से शुरू करने की कोई आवश्यकता नहीं है - सत्र पुस्तकालय हैं जो आपके लिए यह करते हैं। –

+1

क्या आप GAE के लिए सत्र पुस्तकालयों के बारे में अधिक जानकारी प्रदान कर सकते हैं? – lucemia

+1

क्वोटो। अच्छा जवाब ... हालांकि मैंने उल्लेख नहीं किया कि मैं जावा का उपयोग करूंगा। :) –