작은 단계로 인증 구현

RailsEventStore 산하에서 현재 "Arkency 전자상거래"라고 부르는 프로젝트를 시작했을 때 실제 전자상거래가 아닌 주문 관리 시스템(OMS)으로 시작했습니다.

나는 항상 OMS가 전자 상거래 플랫폼의 분명한 부분이라고 생각했습니다. 최근에 나는 그것이 항상 그런 것은 아니며 심지어Shopify recommend 일부 다른 OMS 시스템을 전자 상거래에 추가하는 것으로 보고 있음을 알게 되었습니다.

흥미로운.

어쨌든, 우리 프로젝트가 성장했을 때, 우리는 "영업 패널"또는 "OMS 패널"에 집중했습니다. 사용자는 아마도 영업 사원이었을 것입니다. 이에 대한 인증이 없었습니다. 인트라넷에 숨겨진 회사의 내부용이라고 추측할 수 있습니다.



얼마 후 "클라이언트 보기"를 만들었습니다. 처음에는 인증도 없었습니다. "로그인"한 클라이언트를 선택하기 위한 "선택 목록"만 추가했습니다.



그러나 그때에도 우리는 로그인한 클라이언트를 기억하기 위해 URL 매개변수를 사용했습니다. 또한 기능은 과거에도 여전히 매우 제한적입니다. 주문 목록에 불과했습니다.

오더 상세보기도 있었는데 그냥 뺐습니다. 내가 제거한 이유는 테스트가 없었고 OSM OrdersList 읽기 모델에서 빌린 자체 읽기 모델을 사용하지 않았기 때문입니다. 별거 아닌 것 같지만 실제로는 그렇습니다. 우리는 클라이언트 패널을 방해하기 위해 OSM에 대한 변경을 원하지 않습니다.

최근 변경 사항 중 하나는 아직 암호가 없는 상태에서 쿠키 저장소로 인증을 확장한 것입니다.

나는 작은 단계의 개념을 좋아하거나 "중간에서 시작"이라고 부르는 것을 좋아합니다.

인증 없이 시작했지만 어떻게 보일지에 집중했습니다. "보는 것"/"느끼는 것"후에 우리는 다음을 결정할 수 있습니다.



이것이 마감일과 클라이언트에 국한되지 않는 오픈 소스 코드베이스의 사치입니다.

작은 단계는 두 가지 관점을 허용합니다.

코드 관점

일부 코드 해킹(읽기 모델 결합)으로 시작하여 아키텍처에 어떻게 반영되어야 하는지 생각할 시간을 벌 수 있습니다. 어떤 냄새가 나는지 느낄 때 비로소 더 나은 건축을 생각해낼 수 있습니다.
이 경우 "클라이언트 패널"이 별도의 앱과 같다는 것을 깨달았습니다. 애플리케이션 계층에서는 어떤 식으로든 반영되어야 합니다. 저는 일반적인 웹 앱에서 2단계의 아키텍처 분할을 강력하게 믿습니다.
한 수준은 앱 계층입니다. 두 번째는 도메인 계층입니다.

종종 사람들은 이 두 가지를 혼동하여 병합하려고 합니다. 앱 분할이 무엇이든 도메인 분할이 됩니다. 이러한 1차원 분할을 수행하는 것이 거의 불가능하기 때문에 이것은 안타까운 일입니다.

UI 관점

UI를 가지고 노는 것은 기능과 함께 우리가 어디에 있고 구현할 다음 이야기가 무엇인지 다시 생각할 수 있게 합니다. UI를 사용하면 추가할 다음 작은 단계가 무엇인지 생각하게 됩니다.
인증은 이 영역에서 가장 중요한 기능이 아닙니다. 라이브로 전환하면 중요하지만 그 전에는 원하는 경우 기능 플래그 뒤에 숨길 수 있습니다. 우리는 모두 인증을 구축하는 방법을 알고 있습니다. 위험한 지역이 아닙니다. 그러나 클라이언트 패널을 사용하려면 정확히 무엇을 넣어야 할지 모릅니다. 이것은 더 위험합니다.

현재 코드베이스

module Client
  class ClientsController < ApplicationController
    layout "client_panel"

    def index
      @clients = ClientOrders::Client.all
      render "clients/index"
    end

    def login
      cookies[:client_id] = params[:client_id]
      redirect_to client_orders_path
    end

    def logout
      cookies.delete(:client_id)
      redirect_to clients_path
    end
  end
end



module Client
  class OrdersController < ApplicationController

    layout 'client_panel'

    def index
      render html: ClientOrders::OrdersList.build(view_context, cookies[:client_id]), layout: true
    end

  end
end



보다시피 사용자/비밀번호 확인 없이 쿠키만 설정합니다.

이것은 로그인에 암호를 사용할 수 있도록 구현하는 다음 이야기가 될 것입니다. 이 "작은 단계"접근 방식에서 흥미로운 점은 암호를 선택하지 않고도 시작할 수 있다는 것입니다. 사용자 관점에서 우리는 클라이언트의 암호를 생성하고 계정을 만든 다음 (나중에) 암호를 선택/변경할 수 있도록 하는 아이디어로 시작할 수 있습니다. 구현해야 할 3개의 다른 "이야기"와 같습니다.

코드에 관해서는 다음과 같은 부분이 흥미로울 수 있습니다.

render html: ClientOrders::OrdersList.build(view_context, cookies[:client_id]), layout: true


저는 ERB 대신 Ruby로 템플릿을 작성하는 특이한 접근 방식으로 Rails 뷰 구현을 선택했습니다.

그러나 그것은 다른 블로그 게시물의 주제입니다.

감사!

좋은 웹페이지 즐겨찾기