Google App Engine için basit kullanıcı yönetimi örnek?

3 Cevap php

Google App Motor çaylağım. Ben öğretici ile devam ederken, biz php-mysql yapılacak birçok şey GAE mevcut değildir bulundu. Datastore otomatik artış özelliği örneğin mevcut değildir. Ayrıca ben GAE oturum yönetimi hakkında karıştı. Üzerinden tüm Kafam karışık ve her şeyi görselleştirmek olamaz.

Kullanıcı kaydı, kullanıcı girişi, kullanıcı oturumu kapatma, oturumu (oluşturmak, yönetmek, yok) veri Mağazası ile birlikte bana basit bir kullanıcı yönetim sistemi bildiriniz. Ben basit ama etkili bir örnek alabilirsiniz nerede da beni lütfen bildiriniz.

Şimdiden teşekkürler.

3 Cevap

Ben kendi kullanıcı ve oturum manangement kullanma eğiliminde

Benim web işleyicileri için bir session denilen dekoratör denilen ve bir takmak olacak authorize. session dekoratör her istek için bir oturumu eklemek olacak, ve authorize dekoratör kullanıcı yetkili olduğundan emin olun olacaktır.

(Bir uyarı, yetki dekoratör benim uygulamaları geliştirmek nasıl özgü - adı en istekleri ilk parametre olarak).

Yani, örneğin bir web işleyici gibi görünebilir:

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)

Yukarıdaki kodda, session dekoratör ben istek üzerine mevcut çerezlere dayalı gereken bazı oturum şeyler ekler. authorize başlığı oturumu doğru biri olup olmadığını kullanıcı sadece sayfasına erişebilirsiniz emin olacaktır.

Dekoratörler kod aşağıda:

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 en iyi bahistir - sürümü ile ben auth, size işaret ve oturumları Django dokümanlar başına "sadece çalışmak" gerektiğini hem de. this article oradan devam etmek için nasıl basit talimatları ve örnek verir.

Django oturumları için, bkz: {[(0)];} Django auth için, here.

Google'ın kendi kimlik doğrulama hizmetleri kullanmak çünkü, kullanıcı yönetimi ve kayıt ve tüm bu yazmayın. Bu, tüm App Engine belgelerinde dahil edilir.