Je fais une authentification simple en python pyramid voici le security.py où je fais la partie authentification.UndefinedError: 'pyramid.util.Request object' n'a pas d'attribut 'user'
security.py
from pyramid.authentication import AuthTktAuthenticationPolicy
from pyramid.authorization import ACLAuthorizationPolicy
from .models.user import User
class MyAuthenticationPolicy(AuthTktAuthenticationPolicy):
def authenticated_userid(self, request):
user = request.user
if user is not None:
return user.id
def get_user(request):
user_id = request.unauthenticated_userid
if user_id is not None:
user = request.dbsession.query(User).get(user_id)
return user
def includeme(config):
settings = config.get_settings()
authn_policy = MyAuthenticationPolicy(
settings['auth.secret'],
hashalg='sha512',
)
config.set_authentication_policy(authn_policy)
config.set_authorization_policy(ACLAuthorizationPolicy())
config.add_request_method(get_user, 'user', reify=True)
le réglage sont ajoutés au fichier init qui fonctionne pour la première fois et la méthode de requête est également ajouté à demander.
Voici mon fichier de vue pour la connexion où, fondamentalement, après avoir vérifié le nom d'utilisateur et mot de passe et en écrivant le code de mémorisation et de stocker des informations d'utilisateur, mais peut-être cette partie ne fonctionne pas.
default.py
@view_config(route_name='auth', match_param='action=in', renderer='string',
request_method='POST')
@view_config(route_name='auth', match_param='action=out', renderer='string')
def sign_in_out(request):
username=request.POST.get('username')
if username:
user=UserService.by_name(username)
if user and user.verify_password(request.POST.get('password')):
headers=remember(request,user.name)
return HTTPFound(location=request.route_url('admin'),headers=headers)
else:
headers=forget(request)
return HTTPFound(location=request.route_url('home'),headers=headers)
ici après avoir vérifié le nom d'utilisateur et mot de passe. J'ai vérifié cette partie travaille FAIS cette copie de dessus têtes = souvenir (demande, user.name) retour HTTPFound (location = request.route_url ('admin'), les en-têtes = en-têtes)
la itinéraire d'administration rend le admin.jinja2 donc dans le fichier admin.jinja2
welcome {{request.user.name}}
faire cela me renvoie une erreur jinja2.exceptions.UndefinedError
UndefinedError: 'pyramid.util.Request object' has no attribute 'user'
Et comment incluez-vous le 'security'? –
config.include ('. Security') dans __init__.py dans le dossier racine –
2 choses viennent à l'esprit: a) 'get_user' throws AttributeError, ou b)' includeme' n'est pas réellement exécuté (peut-être vous devriez déboguer print là) –