2011-07-15 12 views
8

Sposób, w jaki mogę uwierzytelnić użytkowników w AppEngine za pomocą kont Google jest po prostu cudowny.Google AppEngine: niestandardowe uwierzytelnianie

Muszę jednak użyć mojego własnego systemu uwierzytelniania .

Będę mieć tabelę aplikacji, z nazwami użytkowników i zaszyfrowanymi hasłami.

Przeczytałem coś o sesjach na gae, ale potrzebuję pomocy w uruchomieniu zabezpieczeń mojej aplikacji.

Jak mogę śledzić moją uwierzytelnioną sesję użytkownika? Ustawianie pliku cookie?

Początkujący.

+0

Powinieneś raczej dodać tag, dla których czas pracy, którego używasz (Python/Java) wyciągnąć właściwą tłum. Zapoznaj się także z frameworkami, które mogą Ci pomóc przy sesji ze stroną –

+0

Istnieją biblioteki sesji dla App Engine - o czym nie masz pewności? –

Odpowiedz

6

Możesz użyć cookie, aby to zrobić ... To naprawdę nie jest takie trudne. Możesz użyć cookie, aby śledzić uwierzytelnienie użytkownika i przechowywać klucz sesji w gast datastore.

Jest przykładem (To właśnie przedstawiają podstawowe pojęcia, nie gwarantuje, że kod może być użyty bezpośrednio)

podstawowej tabeli użytkownika:

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

Funkcja Logowanie

# 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 

funkcja wylogowania

# 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))) 

Gdy wymagane logowanie użytkownika

# 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

Naprawdę nie ma potrzeby odkrywania koła - istnieją biblioteki sesji, które robią to za Ciebie. –

+1

Czy możesz podać więcej szczegółów na temat bibliotek sesji dla GAE? – lucemia

+1

quoto. Dobra odpowiedź ... jednak nie wspomniałem, że będę używał JAVA. :) –

Powiązane problemy