문서 에 따라 피라미드 응용 프로그램에 권한을 추가했습니다 . 현재 앱은 정보 만 표시합니다.
또한 MySQL에서 로그인 정보를 얻을 것이므로 이와 유사한 것을 구현 했습니다 .
그러나 제대로 작동하지 않으며 해결 방법을 모르겠습니다.
로그 아웃 한 후 대상 페이지 URL을 입력하기 만하면 전체 로그인을 건너 뛸 수 있습니다. 로그인을 '잊는'것이 아닌 것 같습니다. URL을 직접 입력해도 로그인 페이지로 리디렉션되지 않습니다.
여기, 내 것이요 views.py:
대상 페이지 :
@view_config(route_name='monitor',
renderer='monitor:templates/monitor.mak',
permission='view'
)
def monitor(request):
oEntry_Logins = DBSession.query(Login).order_by(Login.id)
oEntry_Alerts = DBSession.query(Alert).order_by(Alert.id)
return {
'oEntry_Logins' : oEntry_Logins,
'oEntry_Alerts' : oEntry_Alerts,
'logged_in' : request.authenticated_userid,
}
로그인 / 로그 아웃 :
@view_config(route_name='login', renderer='templates/login.pt')
@forbidden_view_config(renderer='templates/login.pt')
def login(request):
login_url = request.route_url('login')
referrer = request.url
if referrer == login_url:
referrer = '/' # never use the login form itself as came_from
came_from = request.params.get('came_from', referrer)
message = ''
login = ''
password = ''
if 'form.submitted' in request.params:
login = request.params['login']
password = request.params['password']
user = DBSession.query(User).filter(login==User.name).filter(password==User.password).count() #DBSession
if(user != 0): #DBSession
headers = remember(request, login)
return HTTPFound(location = came_from,
headers = headers)
message = 'Failed login'
return dict(
message = message,
url = request.application_url + '/login',
came_from = came_from,
login = login,
password = password,
)
#logout view
@view_config(route_name='logout')
def logout(self):
request = self.request
headers = forget(request)
return HTTPFound(location = request.route_url('login'),
headers = headers)
내 모델 파일은 다음과 같습니다.
...
class RootFactory(object):
__acl__ = [ (Allow, Everyone, 'view'),
(Allow, 'group:editors', 'edit') ]
def __init__(self, request):
pass
내 security.py 파일 :
from .models import (
DBSession,
User,
)
def groupfinder(userid, request):
session = DBSession()
for instance in session.query(User).filter(User.name==userid):
group = 'group:' #all are simply part of the same group
lsth = {'userid':[group]}
return lsth.get ('userid')
현재 테스트 목적으로 비밀번호는 mysql 데이터베이스에 일반 텍스트로 저장됩니다.
이 코드가 제대로 작동하도록하려면 어떻게해야합니까?
한 번 더 요청하세요. groupfinder
함수도 게시 할 수 있나요?
그래서 일어나는 것처럼 보이는 permission='view'
것은 뷰가에 열려 있다는 것을 의미합니다 Everyone
. 로 변경 permission='edit'
하면 "editors"그룹의 구성원 만 사용할 수 있지만 groupfinder ()에서 반환되는 내용에 따라 달라집니다.
또는을 사용하는 경우 (Allow, Authenticated, 'edit')
권한을 '수정'으로 변경하면 로그인 한 경우에만 액세스 할 수있을 from pyramid.security import Authenticated
것입니다. 가져 오기 문에도 추가해야 할 수도 있습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다