Я делаю простую аутентификацию в пирамиде питона, вот security.py, где я делаю часть аутентификации.UndefinedError: 'pyramid.util.Request object' не имеет атрибута '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)
настройки добавляются в файл инициализации, который работает в первый раз, и метод запроса также добавляется для запроса.
Вот мой файл для просмотра для входа в систему, где в основном после проверки имени пользователя и пароля и написания кода помнить и хранить информацию о пользователе, но может быть, эта часть не работает.
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)
здесь после проверки имени пользователя и пароля. Я проверил, что часть работает делает это скопировано из выше заголовков = помните (запрос, user.name) возвращения HTTPFound (место = request.route_url («админ»), заголовки = заголовки)
админ маршрут делает admin.jinja2 так в файле admin.jinja2
welcome {{request.user.name}}
делает это бросает мне ошибку jinja2.exceptions.UndefinedError
UndefinedError: 'pyramid.util.Request object' has no attribute 'user'
И как вы включаете 'безопасность'? –
config.include ('. Security') в __init__.py в корневой папке –
2 вещи приходят на ум: a) 'get_user' throws AttributeError или b)' includeme' фактически не запускается (возможно, вам следует отлаживать отпечаток там) –