Je crée une page Web de base qui a une page d'inscription et une page de connexion. J'utilise google app engine, python et HTML. Ceci est ma fonction utilisateur:Comment créer une fonctionnalité de connexion qui extrait l'utilisateur de la base de données?
class User(db.Model):
name = db.StringProperty(required=True)
pw_hash = db.StringProperty(required=True)
email = db.StringProperty()
@classmethod
def by_id(cls, uid):
return cls.get_by_id(uid, parent=users_key())
@classmethod
def by_name(cls, name):
u = cls.all().filter('name=', name).get()
return u
@classmethod
def register(cls, name, pw, email=None):
pw_hash = make_pw_hash(name, pw)
return cls(parent=users_key(),
name=name,
pw_hash=pw_hash,
email=email)
@classmethod
def login(cls, name, pw):
u = cls.by_name(name)
if u and valid_pw(name, pw, u.pw_hash):
return u
Lorsque j'inscris de nouveaux utilisateurs, je les mets dans la base de données. Ils sont stockés dans la base de données:
class Register(Signup):
def done(self):
#make sure the user doesn't already exist
u = User.by_name(self.username)
if u:
msg = 'That user already exists.'
self.render('signup-form.html', error_username = msg)
else:
u = User.register(self.username, self.password, self.email)
u.put()
self.login(u)
self.redirect('/blog')
Mais quand j'utilise ma fonction de connexion, je ne peux pas récupérer l'utilisateur de la base de données à utiliser la fonction de connexion. Il dit: « connexion invalide » à chaque fois:
class Login(BlogHandler):
def get(self):
self.render('login-form.html')
def post(self):
username = self.request.get('username')
password = self.request.get('password')
u = User.login(username, password)
if u:
self.login()
self.redirect('/blog')
else:
msg = 'Invalid login'
self.render('login-form.html', error = msg)
Quand j'inscription, il est censé reconnaître que l'utilisateur est déjà dans la base de données. Cependant, je suis capable de m'inscrire avec les mêmes informations à chaque fois. Voici mon inscription Handler:
class Signup(BlogHandler):
def get(self):
self.render("signup-form.html")
def post(self):
have_error = False
self.username = self.request.get('username')
self.password = self.request.get('password')
self.verify = self.request.get('verify')
self.email = self.request.get('email')
params = dict(username = self.username,
email = self.email)
if not valid_username(self.username):
params['error_username'] = "That's not a valid username."
have_error = True
if not valid_password(self.password):
params['error_password'] = "That wasn't a valid password."
have_error = True
elif self.password != self.verify:
params['error_verify'] = "Your passwords didn't match."
have_error = True
if not valid_email(self.email):
params['error_email'] = "That's not a valid email."
have_error = True
if have_error:
self.render('signup-form.html', **params)
else:
self.done()
def done(self, *a, **kw):
raise NotImplementedError
est ici la fonction bloghandler qui est la ligne de base pour toutes les autres fonctions:
class BlogHandler(webapp2.RequestHandler):
def write(self, *a, **kw):
self.response.out.write(*a, **kw)
def render_str(self, template, **params):
params['user'] = self.user
return render_str(template, **params)
def render(self, template, **kw):
self.write(self.render_str(template, **kw))
def set_secure_cookie(self, name, val):
cookie_val = make_secure_val(val)
self.response.headers.add_header(
'Set-Cookie',
'%s=%s; Path=/' % (name, cookie_val))
def read_secure_cookie(self, name):
cookie_val = self.request.cookies.get(name)
return cookie_val and check_secure_val(cookie_val)
def login(self, user):
self.set_secure_cookie('user_id', str(user.key().id()))
def logout(self):
self.response.headers.add_header('Set-Cookie', 'user_id=; Path=/')
def initialize(self, *a, **kw):
webapp2.RequestHandler.initialize(self, *a, **kw)
uid = self.read_secure_cookie('user_id')
self.user = uid and User.by_id(int(uid))
Voici le lien vers la GitHub:
https://github.com/keldavis/registration
Voici le lien vers le site web:
ation-148718.appspot.com
Comment faire en sorte que ma page d'inscription reconnaisse un utilisateur déjà créé? Et comment puis-je faire en sorte que ma page de connexion récupère mon utilisateur de la base de données et effectue une connexion valide?