납치하여 고객을 돕다
고객의 계정에 액세스하여 보고 있는 내용을 확인할 수 있는 경우 직접 문제를 확인하여 문제의 소재를 추정할 수 있습니다.Django는 데이터베이스에 순수한 텍스트 비밀번호를 저장하지 않는 현명한 방법을 채택하여 고객으로 로그인할 수 없습니다.아니면 할 수 있겠어?django-hijack를 사용하면 사용자 계정을 모의하여 고객 경험을 체험할 수 있습니다.
본고의 나머지 부분에서 우리는 내가djangohijack을 통합하여 나의 개인 프로젝트 중 하나가 이 기능을 제공하는 경험을 소개할 것이다.우리가 완성할 때, 만약 당신이 아날로그 고객의 계정을 통해 고객을 지원해야 한다면, 당신은django 납치를 자신의 프로젝트에 추가하는 방법을 잘 알게 될 것이라고 생각합니다.
안녕하십니까, 비행기 납치!
프로젝트에djangohijack을 설치해야 합니다.
(venv) $ pip install django-hijack
PyPI에서 패키지를 설치한 후에는 패키지를 목적에 사용할 URL을 포함하여 INSTALLED_APPS
에 추가해야 합니다.django 납치는 두 개의 독립된 응용 프로그램hijack
과 compat
에 의존하는 응용 프로그램에 의존한다.# 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_hijack
와 HIJACK_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 납치를 소개했는데 이것은 고객이 문제를 해결할 때 고객의 행동을 대표하는 강력한 도구이다.
나는 나의 프로젝트를 위해 어떻게 이것을 설정하는지 보여 주었다.우리는 검사했다.
hijack_started
관리를 확장하는 방법만약 당신이 문제가 있거나 이 글을 좋아한다면 언제든지 트위터에 메시지를 남겨 주십시오. 다른 사람들도 흥미를 느낄 수 있다고 생각한다면 저에게 공유해 주십시오.
본고는 처음으로 mattlayman.com에 나타났다.
Reference
이 문제에 관하여(납치하여 고객을 돕다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mblayman/hijack-to-help-customers-154c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)