Я новичок в Google App Engine. В то время как я проходил учебное пособие, я обнаружил, что несколько вещей, которые мы делаем в php-mysql, недоступны в GAE. Например, в функции autoStore dataStore недоступна. Также меня смущает управление сеансом в GAE. Из-за всего меня это смущает и не может визуализировать все это.
Пожалуйста, сообщите мне простую систему управления пользователями с регистрацией пользователя, логином пользователя, выходом пользователя, сеансом (создайте, управляйте, уничтожьте) с помощью хранилища данных. Также, пожалуйста, сообщите мне, где я могу получить простые, но эффективные примеры.
Заранее спасибо.
Я склонен использовать свой собственный интерфейс пользователя и сеанса
Для моих веб-обработчиков я приложу декоратор, называемый session
и один из которых называется authorize
. Декодер session
будет прикреплять сеанс к каждому запросу, а authorize
декоратор будет удостовериться, что пользователь авторизован.
(Осторожно, авторский декоратор специфичен для того, как я разрабатываю свои приложения – имя пользователя является первым параметром в большинстве запросов).
Например, веб-обработчик может выглядеть так:
class UserProfile(webapp.RequestHandler): @session @authorize def get(self, user): # Do some funky stuff # The session is attached to the self object. someObjectAttachedToSession = self.SessionObj.SomeStuff self.response.out.write("hello %s" % user)
В приведенном выше коде декоратор session
прикрепляет некоторые материалы сеанса, которые мне нужны, на основе файлов cookie, которые присутствуют в запросе. Заголовок authorize
будет следить за тем, чтобы пользователь мог получить доступ только к странице, если сеанс является правильным.
Код декоратора ниже:
import functools from model import Session import logging def authorize(redirectTo = "/"): def factory(method): 'Ensures that when an auth cookie is presented to the request that is is valid' @functools.wraps(method) def wrapper(self, *args, **kwargs): #Get the session parameters auth_id = self.request.cookies.get('auth_id', '') session_id = self.request.cookies.get('session_id', '') #Check the db for the session session = Session.GetSession(session_id, auth_id) if session is None: self.redirect(redirectTo) return else: if session.settings is None: self.redirect(redirectTo) return username = session.settings.key().name() if len(args) > 0: if username != args[0]: # The user is allowed to view this page. self.redirect(redirectTo) return result = method(self, *args, **kwargs) return result return wrapper return factory def session(method): 'Ensures that the sessions object (if it exists) is attached to the request.' @functools.wraps(method) def wrapper(self, *args, **kwargs): #Get the session parameters auth_id = self.request.cookies.get('auth_id', '') session_id = self.request.cookies.get('session_id', '') #Check the db for the session session = Session.GetSession(session_id, auth_id) if session is None: session = Session() session.session_id = Session.MakeId() session.auth_token = Session.MakeId() session.put() # Attach the session to the method self.SessionObj = session #Call the handler. result = method(self, *args, **kwargs) self.response.headers.add_header('Set-Cookie', 'auth_id=%s; path=/; HttpOnly' % str(session.auth_token)) self.response.headers.add_header('Set-Cookie', 'session_id=%s; path=/; HttpOnly' % str(session.session_id)) return result return wrapper def redirect(method, redirect = "/user/"): 'When a known user is logged in redirect them to their home page' @functools.wraps(method) def wrapper(self, *args, **kwargs): try: if self.SessionObj is not None: if self.SessionObj.settings is not None: # Check that the session is correct username = self.SessionObj.settings.key().name() self.redirect(redirect + username) return except: pass return method(self, *args, **kwargs) return wrapper
Django – ваш лучший выбор – с той версией, на которую я указал вам, auth и сеансы должны «просто работать» в соответствии с документами Django. эта статья дает простые инструкции и пример того, как исходить оттуда.
Для сеансов Django см. Здесь ; для Django auth, здесь .
Вы не пишете управление пользователями и регистрацию, и все это, потому что вы используете собственные службы аутентификации Google. Все это включено в документацию App Engine.