납치하여 고객을 돕다

10973 단어 djangopython
당신은 심란한 고객이 있습니다. 당신의 Django가 지원하는 사이트에 매우 까다로운 문제가 있습니다.고객이 도움말 고지서 시스템을 사용하고 문제를 보고했습니다.당신은 이미 직무를 다하고 검사를 마쳤습니다.
  • 귀하의 사이트의 로그는 고객의 행위와 무관함을 나타냅니다
  • 오류 추적 시스템은 고객이 한 일이 예외가 없음을 나타낸다
  • 고객의 설명은 문제를 전면적으로 진단하기 위한 충분한 정보를 포함하지 않았다
  • 개발 환경에서의 실험은 이 문제를 복제할 수 없습니다
  • 뭐 공부 해요?어려운 소프트웨어 문제를 해결하는 데는 통상적으로 문제를 재현하는 능력이 필요하다.남의 입장에서 1마일을 걸으면 많은 것을 배울 수 있다는 말이 있다.
    고객의 계정에 액세스하여 보고 있는 내용을 확인할 수 있는 경우 직접 문제를 확인하여 문제의 소재를 추정할 수 있습니다.Django는 데이터베이스에 순수한 텍스트 비밀번호를 저장하지 않는 현명한 방법을 채택하여 고객으로 로그인할 수 없습니다.아니면 할 수 있겠어?django-hijack를 사용하면 사용자 계정을 모의하여 고객 경험을 체험할 수 있습니다.
    본고의 나머지 부분에서 우리는 내가djangohijack을 통합하여 나의 개인 프로젝트 중 하나가 이 기능을 제공하는 경험을 소개할 것이다.우리가 완성할 때, 만약 당신이 아날로그 고객의 계정을 통해 고객을 지원해야 한다면, 당신은django 납치를 자신의 프로젝트에 추가하는 방법을 잘 알게 될 것이라고 생각합니다.

    안녕하십니까, 비행기 납치!


    프로젝트에djangohijack을 설치해야 합니다.
    (venv) $ pip install django-hijack
    
    PyPI에서 패키지를 설치한 후에는 패키지를 목적에 사용할 URL을 포함하여 INSTALLED_APPS에 추가해야 합니다.django 납치는 두 개의 독립된 응용 프로그램hijackcompat에 의존하는 응용 프로그램에 의존한다.
    # project/settings.py
    
    INSTALLED_APPS = [
        ...
        'hijack',
        'compat',
        ...
    ]
    
    # project/urls.py
    
    urlpatterns = [
        ...
        path("hijack/", include("hijack.urls")),
        ...
    ]
    
    나는 나의 프로젝트에 최종 설정을 추가했지만, 우리는 잠시 후에 볼 수 있다.

    납치된 틀


    고객의 계좌를 모의할 때, 당신은 자신의 계좌에 없다는 뚜렷한 징후가 있기를 바랍니다.고객의 데이터를 삭제하는 등 어리석은 짓을 피하는 데 도움이 될 것이다.
    djangohijack은 로그인한 세션이 납치되었는지 확인하는 데 도움을 주는 템플릿을 제공합니다.이러한 기능이 있어, 당신이 고객으로 위장할 때, 당신의 템플릿을 수정해서 당신의 주의를 끌 수 있다.
    내가djangohijack에 가입한 프로젝트에서 나의 테마 색깔은 파란색이다.내 기본 사용자 인터페이스는 다음과 같습니다.

    나는djangohijack의 내장 템플릿 표시를 사용하여 기본 내비게이션을 파란색이 아니라 빨간색으로 설정하고 고객 계정을 납치할 때 맡은 역할을 설명하는 상하문을 추가했다.이것은 출력 예입니다. (주의: 이것은 제 개발 기계에서 얻은 것입니다. 당신은 누군가의 실제 데이터를 보지 않았습니다.)

    이 변경을 진행하기 위해서 프로젝트에서 내비게이션 표시줄 템플릿을 수정했습니다.관련 섹션을 표시하는 템플릿 코드는 다음과 같습니다.
    {% load hijack_tags %}
    
    {% if request|is_hijacked %}
      <div class="mr-4 font-light">
        As: {{ user.email }}
      </div>
      <form class="mr-4" method="POST" action="{% url 'hijack:release_hijack' %}">
        {% csrf_token %}
        <button class="hover:underline font-light" type="submit">Release</button>
      </form>
    {% endif %}
    
    우선, hijack 이 로드되었는지 확인해야 합니다.이렇게 하면 hijack_tags 템플릿 필터에 액세스할 수 있습니다.이 필터는 is_hijacked 컨텍스트 프로세서에서 제공하는 request 대상을 가져오는 데 사용됩니다.컨텍스트 프로세서의 단일 작업은 컨텍스트에 django.template.context_processor.request 를 추가하는 것입니다.
    # django/template/context_processors.py
    
    ...
    
    def request(request):
        return {'request': request}
    
    request귀환is_hijacked할 때, 나는 고객의 이메일 주소를 표시하고 납치를 풀어서 내 사용자 계정으로 돌아가는 폼을 표시하기 위해 사용자 인터페이스를 수정했다.그리고 일부 템플릿 코드는 True 기반의 파란색 CSS 클래스가 아니라 빨간색 CSS 클래스를 선택했습니다. 예시 코드에 표시하고 싶지 않습니다.

    누가 납치했습니까?


    만약 어떤 사용자가 다른 사용자를 모의할 수 있다면, 이것은 나쁜 시스템이 될 것이다.누군가가 어떻게 다른 고객의 계좌를 납치할 수 있습니까?기본적으로,django 납치는 슈퍼 사용자의 접근 권한이 있는 사용자만 납치 계정을 허용합니다.
    이 설정은 설정을 통해 제어할 수 있지만, 나에게는 매우 합리적인 기본값이다.아날로그 기능의 균형을 고려할 때 납치 능력을 매우 작은 서브집합으로 제한하는 것은 좋은 안전 입장이다.
    납치를 시작하기 위해 라이브러리는 몇 개의 URL 단점을 제공했고 이 단점을 발표할 수도 있었지만 이 과정을 시작하기 위해 더 쉽게 접근할 수 있는 방법을 원합니다.
    내 프로젝트에서 나는 슈퍼유저로서 고객의 계좌를 납치할 수 있도록 관리 조작을 만들었다.코드는 다음과 같습니다.
    # users/admin.py
    
    from django.contrib import admin
    from django.contrib.auth import get_user_model
    from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
    from hijack.helpers import login_user
    
    
    @admin.register(get_user_model())
    class UserAdmin(AuthUserAdmin):
        actions = ["hijack_user"]
    
        def hijack_user(self, request, queryset):
            """Hijack a user."""
            if len(queryset) == 1:
                user = queryset[0]
                return login_user(request, user)
    
    납치 요청은 단일 고객 계정에만 적용되기 때문에 나의 관리 조작은 한 사용자만 선택했는지 검사할 것이다.그리고 코드는djangohijack의is_hijacked 조수를 사용합니다. 이 조수는 적당한 권한 수여 검사를 하고 고객의 계정으로 다시 지정합니다. 전제는 직원 사용자가 정확한 권한을 가진다는 것입니다(즉, 관리자를 사용하는 직원 사용자는 슈퍼 사용자입니다).
    이전 섹션의 템플릿에서 사용한 URL도 시뮬레이션을 마친 후 납치자의 계정을 적당한 목표로 되돌릴 수 있도록 설정이 필요합니다.나는 관리 조작을 나의 입구점으로 사용했기 때문에 그것도 나의 출구점이어야 한다고 결정했다.설정 추가 사용login_user 설정.
    # project/settings.py
    
    HIJACK_LOGOUT_REDIRECT_URL = "/<admin site prefix>/users/user/"
    
    이 설정이 있으면 시작할 때의 같은 관리 페이지로 돌아갈 수 있습니다.

    윤리적 고려


    너는 너의 프로젝트에서 이렇게 해야 합니까?
    우리가 고객 계정과 데이터에 대해 이야기할 때, 납치, 사칭, 위장은 잠재적인 무서운 용어이다.
    나는 기술이 좋은 것과 나쁜 목적에 쓰일 수 있다고 굳게 믿는다.나는 고객 계좌를 납치하는 것이 프라이버시 침해로 간주될 수 있다는 사실을 결코 소홀히 하지 않았다.
    이를 감안하여 나는 소프트웨어 개발자로서 우리는 우리의 행위의 도덕적 함의를 고려해야 한다고 생각한다.
    django 납치 같은 도구를 사용하는 것이 최후의 수단이다.나는 본문을 시작할 때 납치 세션을 시작하기 전에 고려해야 할 각종 조건을 지적했다.이를 다시 한 번 알림으로 표시합니다.
  • 당신은 모든 일지를 검사했습니까?
  • 모든 오류 모니터링 도구를 검사했습니까?
  • 고객의 의견을 듣고 문제를 해결했습니까?
  • 먼저 개발 환경에서 문제를 복제하시겠습니까?
  • 이 도구를 사용하여 고객을 시뮬레이션하는 것은 다른 옵션이 결과를 낼 수 없을 때 고객을 돕기 위해서입니다.만약 당신이 이미 모든 다른 선택을 다 썼다면, 나는 고객을 대표하여 일을 처리하는 것이 받아들일 수 있는 선택이라고 생각한다.
    고객으로서 로그인할 때, 나는 여전히 가능한 한 프라이버시를 존중하는 것이 가장 좋다고 생각한다.아날로그 세션의 목표는 문제를 관찰하고 진단한 후에 종료하는 것이다.고객의 문제를 현장에서 관찰하기 위한 모든 조치는 고객 보고 절차에 국한되어야 한다.
    만약 당신이 더 큰 팀에서 고객 계좌를 방문할 때, 당신은 다른 절차를 취해 당신의 행위(또는 동료의 행위)에 대해 책임을 질 수 있다.
    django 납치는 두 개의 사용자 정의 django 신호를 포함하고 있습니다. 이 신호를 사용하여 납치의 사용 상황을 감시할 수 있습니다.신호hijack:release_hijackHIJACK_LOGOUT_REDIRECT_URL는 납치자와 납치된 고객 계정의 사용자 ID를 보고합니다.이러한 데이터는 특정한 유형의 감사 로그에 추가되고 남용 상황을 감시할 수 있다.
    이상적인 세계에서 우리는 이런 시스템을 필요로 하지 않고 모든 팀원들을 믿을 수 있지만 분명히 이상적이지 않은 세계에 대해 시스템에 문책제를 내장하는 것은 좋은 선택이다.
    마지막으로 제가 지적하고자 하는 것은 귀하의 프라이버시 정책이나 귀하의 법률이 귀하의 응용 프로그램에 약간의 제한을 가할 수 있다는 것입니다.나는 변호사인 척하지 않을 테니 현지 법조인에 대한 조사를 확실하게 해 주십시오.

    As software developers, we want to help our customers and make a good product, and we should strive to act ethically in those pursuits.


    총결산


    본고는 django 납치를 소개했는데 이것은 고객이 문제를 해결할 때 고객의 행동을 대표하는 강력한 도구이다.
    나는 나의 프로젝트를 위해 어떻게 이것을 설정하는지 보여 주었다.우리는 검사했다.
  • 초기 설정
  • 납치된 세션을 표시하기 위해 템플릿을 구성하는 방법
  • 납치된 세션을 시작하기 위해 Djangohijack_started 관리를 확장하는 방법
  • 이렇게 강력한 도구를 사용하기 전에 고려해야 할 윤리적 고려
  • 나는 당신이 django 납치를 프로젝트에 응용하여 가능한 한 당신의 고객을 도울 수 있는 것을 배웠으면 합니다.
    만약 당신이 문제가 있거나 이 글을 좋아한다면 언제든지 트위터에 메시지를 남겨 주십시오. 다른 사람들도 흥미를 느낄 수 있다고 생각한다면 저에게 공유해 주십시오.
    본고는 처음으로 mattlayman.com에 나타났다.

    좋은 웹페이지 즐겨찾기