2016-08-22 5 views
2

피라미드 애플리케이션을 구축 중입니다. "정상적인"사용법에서는 사용자가 로그인하기 위해 일반적인 사용자 이름/암호를 사용해야하며 많은 작업을 수행해야합니다. 피라미드 문서를 사용하면 잘라내어 붙여 넣기가 매우 쉬워 져서 그렇게 할 수있었습니다.피라미드에 임시 URL이있는 신원 확인/인증

그러나, 지금은 제한된 확장 할 (모두 권위와 시간에 - 권한 지정된 날짜에 만료) 나는 모든 계정/암호 UI를 경험하고 싶지 않은 사람들에게 편집 기능. 나는 그들에게 내가 생성하는 링크를 전자 메일로 보내고, 그들이 링크를 클릭하면 관련 페이지에 착륙하여 제한된 일부 변경을 수행하도록 식별되고 권한이 부여되기를 원합니다.

, 데이터베이스에 저장, 링크를 생성하는 사용자 이름 및 만료 날짜를 연결하는 등의 모든 명백한 물건은 아무 문제 없습니다. 이 작업을 수행 방법을 모르는 Pyramid ident/auth 프레임 워크에 연결합니다. 나는 코드를 깊이 이해하지 못해도 이것을 멀리까지 만들었고, 누군가가 내가 속이고 싶은 것을 보여주는 코드 예제를 가지고 있기를 바란다면 그 주제에 계속 뛰어 들지 않을 수 있습니다. 대답은 게으른 것을 중지하고 문서를 읽을 경우

또는

는, 음, 그것은 물어 내게 작은 비용. :-)

+0

이 바라 보는 또 다른 방법은 비밀 링크가있는 _anonymous_ 사용자가 페이지를 편집 할 수 있다는 것이다 편집 가능. 그들이 링크를 알고 있으면 편집 할 수 있습니다. – Sergey

+0

일단 당신이 그것을 지적하면 머리가 두드리기가 명백해 보입니다 - Thanks @ Sergey! 내 사건은 그보다 약간 더 복잡하지만, 당신의 요점은 여전히 ​​내 마음을 맑게하는 데 도움이됩니다. –

답변

1

은 임의의 번호와 유효 기간을 작성하고 데이터베이스에 저장합니다. 이 번호로 링크를 생성하여 사용자에게 보냅니다. 링크가 클릭되면 생성 된 임의의 숫자가 데이터베이스에서 일치하는 것을 확인하십시오. 손으로 피라미드 사용자를 인증 :

from pyramid.security import remember, forget 

def authenticate_user(request, user) 

    if not user.can_login(): 
     raise AuthenticationFailure('This user account cannot log in at the moment.') 

    # get_session_token_from_user() is your custom function. 
    # It usually returns user.id - it's the key how session backend maps sessions 
    # back to authenticated user. 
    token = get_session_token_from_user(user) 

    headers = remember(request, token) 
    # assert headers, "Authentication backend did not give us any session headers" 

    if not location: 
     location = get_config_route(request, 'websauna.login_redirect') 

    # Send any custom events related to user login your appplication cares of 
    e = events.Login(request, user) 
    request.registry.notify(e) 

    # Redirect user to the post-login form location 
    return HTTPFound(location=location, headers=headers) 

을 여유 또는 중간 websauna.magiclogin addon를 참조하십시오처럼 한 번에 이메일 링크 로그인을하는 특정 사용 사례를 들어. 전혀 피라미드 인증 기계를 접촉 할 필요가, 당신은 단지 "비밀"페이지 publicly-하지 않습니다 타 - 다 -

+0

고마워요! 당신의 코드는 필자가 필요로하는 피라미드 인증에 대해 충분히 배울 수있는 꽤 고통없는 방법입니다. –