2016-04-01 42 views
2

我在python金字塔中做了一個簡單的身份驗證,這裏是security.py,我在做身份驗證部分。UndefinedError:'pyramid.util.Request對象'沒有'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

根文件夾中的__init__.py中的config.include('。security') –

+0

2想到的事情:a)'get_user'拋出AttributeError,或者b)'includeme'實際上沒有運行(也許你應該在那裏調試打印) –

回答

0

我因爲在layout.jinja2文件{{request.user.name}}有工作cookiecutter Pyramid期間相同的問題不是{% 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 %}