2016-04-01 22 views
2

Python piramidinde basit bir kimlik doğrulaması yapıyorum, burada güvenlik kimlik doğrulaması bölümünü yapıyorum.UndefinedError: 'pyramid.util.Request nesnesi' özniteliği yok 'kullanıcı'

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) 

ayar

security.py ilk kez çalışır ve istek yöntemi de talep eklenir init dosyasına eklenir.

Kullanıcı adı ve şifreyi kontrol ettikten ve hatırlama kodunu yazıp kullanıcı bilgilerini depolamasından sonra temelde bu oturum çalışmıyor olabilir.

default.py adı ve şifrenizle doğruladıktan sonra buraya

@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) 

. Ben o kısmı bu yukarıda başlıklarından = hatırlamak (istek, user.name) dönüş HTTPFound (location = request.route_url ('Yönetici'); başlıklar = başlıklar)

kopyalanan yapıyorum çalışıyor kontrol ettikten Bu bana bir hata atar yapıyor dosya admin.jinja2

welcome {{request.user.name}} 

kadar yönetici rota admin.jinja2 kılan jinja2.exceptions.UndefinedError

UndefinedError: 'pyramid.util.Request object' has no attribute 'user'

+1

Ve bu güvenlik nasıl ekliyorsunuz? –

+0

config.include ('. Güvenlik') __init__.py içinde Kök klasöründe –

+0

2 şey akla gelir: a) 'get_user' AttributeError atar, veya b)' includeme' aslında çalışmıyor (belki de orada hata ayıklamanız gerekir) –

cevap

0

Çünkü layout.jinja2 dosyasında {{request.user.name}}cookiecutter Pyramid sırasında aynı sorunu vardı {% block content %} ve {% endblock %} arasında değildi. Aşağıdaki gibi birini değiştirdikten sonra bu istisna düşürülmüştür.

 {% 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 %} 
İlgili konular