2016-04-01 12 views
2

Я делаю простую аутентификацию в пирамиде питона, вот 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'

+1

И как вы включаете 'безопасность'? –

+0

config.include ('. Security') в __init__.py в корневой папке –

+0

2 вещи приходят на ум: a) 'get_user' throws AttributeError или b)' includeme' фактически не запускается (возможно, вам следует отлаживать отпечаток там) –

ответ

0

я была такая же проблема при работе cookiecutter Pyramid, потому что в layout.jinja2 файле {{request.user.name}} не между {% block content %} и {% endblock %}. После замены одного, как показано ниже, это исключение было удалено.

 {% block content %} 

     {% if request.user is none %} 
     <p class="pull-right"> 
      <a href="{{ request.route_url('login') }}">Login</a> 
     </p> 
     {% else %} 
     <p class="pull-right"> 
      {{request.user.name}} <a href="{{request.route_url('logout')}}">Logout</a> 
     </p> 
     {% endif %} 

     {% endblock %} 

 Смежные вопросы

  • Нет связанных вопросов^_^