serializer로 devisetoken auth의 json을 성형한 롤입니다.
개시하다
이 글에서 우리는 active_model_serializer
gem를 사용하여 devise token auth에서 json의 출력을 성형하는 절차를 설명할 것이다.실제 개발에서 약간 막힌 것은'serializer 성형 사용자의 로그인이 성공했을 때 되돌아오는 json'으로 설정된 것이다.다른 동작에 적용되고 돌아오는 json을 위해 안심하세요.
devise 관련 도입을 포함해서 길어지기 때문에 저는 사랑하지 않아요. 미안해요.
준비할게요.
우선 gm 설치부터 시작합니다.
Gemfile.gem 'active_model_serializers'
bundle install
이렇게 activemodel_serializers의 설치가 완료되었습니다.
이gem 자체의 설명은 우선 다른 기사에 의해 설정합시다.
설정용config/initializers/ams.rb
파일을 수동으로 추가하십시오.
config/initializers/ams.rbActiveModel::Serializer.config.adapter = :json_api
이 부분은 출력된 json의 형식을 지정합니다.옵션에 대한 상세한 설명에 대해 나는 이 문장에 대해 매우 잘 안다.
Rails의 activemodel_serializer 학습100일 OfCode 도전 10일차(Day 10:#100일 OfCode)
여기 지정json_api
되어 있으니 마음에 드는 설정으로 해 주세요.
그럼 드디어 Serializer의 파일을 만들어야 합니다.rails generate serializer User
마지막User
부분은 성형하고 싶은 모델명을 지목한 것이다.이 지령app/serializers/user_serializer.rb
서류가 만들어졌으니 당장 구해라.
app/serializers/user_serializer.rbclass UserSerializer < ActiveModel::Serializer
attributes :id, :name, :nickname, :image, :confirmed_at, :updated_at
end
이것은 json으로 되돌아오는 모델의 열을 지정합니다.다른 것도 설정할 게 많으니 직접 조사하고 힘내세요.
본론으로 들어가겠습니다.
여기까지 준비가 끝났습니다. config에 추가된 설정을 읽기 위해 서버를 다시 시작합시다. 응?벌써 했어요?얘야, 곰돌이 과자 줄게.
그럼 먼저 보고 싶은 게 있어요. Serializer가 성형하지 않은 경우 로그인에 성공했을 때 되돌아오는 json(로그인에 성공한 사용자의 정보)입니다.
이어서 같은 json의 상황을 Serializer로 성형했다.
데이터만 구조화되고 설정된 열만 출력됩니다.
참고로 다음은요.
app/controllers/api/v1/user_controller.rbclass Api::V1::UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user, serializer: UserSerializer
end
end
이런 느낌의 코드구나.
보시다시피 devise의 json이 성형되지 않으면 응용 프로그램 전체로 되돌아오는 json의 형식도 통일성이 없습니다.이는 프런트에도 혼란을 초래하고 유지성도 크게 손상될 수 있다.
하지만 자신이 처음부터 쓴 동작이라면 위 코드처럼 쉽게 구현할 수 있지만, 디비스는 내부에서 마음대로 할 수 있어 이해하기 어렵다.
그래서 이번
1. 계승 컨트롤러
2. 그곳에서 모든 동작의 렌더링 방법을 다시 쓰고 Serializer로 json을 성형한다
이런 절차에 따라 devise가 되돌아오는 json의 성형을 진행한다.
계승 컨트롤러 편
이번에 로그인할 때의 json을 성형하고 싶은데, 로그인할 때의 동작은devise_token_auth/sessions#create
오.그러므로devise_token_auth/sessions
계승 컨트롤러.
app/controllers/api/v1/auth/sessions_controller.rbclass Api::V1::Auth::SessionsController < DeviseTokenAuth::SessionsController
end
새로 만든 컨트롤러를 참조하면 경로를 변경합니다.
제 상황은요.
config/routes.rbRails.application.routes.draw do
namespace :api do
namespace :v1 do
resources :users, only: [:show]
mount_devise_token_auth_for 'User', at: 'auth', controllers: {
registrations: 'api/v1/auth/registrations',
# ここの部分ね
sessions: 'api/v1/auth/sessions'
}
end
end
end
그럼 방금 준비한 단계 2의 굵은 몸짓의 표현 방법을 설명해 드리겠습니다.출력을 제어해야 한다는 말을 듣고 많은 사람들이 처음부터 대상의 동작을 이렇게 다시 쓰려고 한다.하지만 출력만 바꾸고 싶은데 대원을 하나하나 다시 쓰는 방법은 귀찮지 않나요?devise는 특정한 동작에서 성공하고 실패할 때 json을 표현하는 방법을 개별적으로 준비했습니다.중요한 것은 필요에 따라 그곳을 만지작거리면 된다는 것이다.
이러한 방법의 존재는 공식 문서에 실렸다.이 기사에 일본어 번역을 도와주는 사람이 있어서 붙일 거예요.
devise-auth-token 공식 문서
시계를 보면 알 수 있듯이 이번에 내가 성형하고 싶은 것은 로그인에 성공했을 때의 json이다.렌더링 방법render_create_success
인 셈이다.우리 곧 추월을 시작합시다.
app/api/v1/auth/session_controller.rbclass Api::V1::Auth::SessionsController < DeviseTokenAuth::SessionsController
def render_create_success
render json: @resource, serializer: UserSerializer
end
end
로그인에 성공했을 때의 자원, 즉user의 정보@resource를 얻을 수 있습니다.Serializer로 성형하면...
이 거리!json은 구조화되어 열도 설정된 것만 되돌려줍니다!
참고 문헌
정보가 비교적 적은 상황에서 유용한 보도가 생겼다.진심으로 감사하다.
gem 'active_model_serializers'
bundle install
ActiveModel::Serializer.config.adapter = :json_api
rails generate serializer User
class UserSerializer < ActiveModel::Serializer
attributes :id, :name, :nickname, :image, :confirmed_at, :updated_at
end
class Api::V1::UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user, serializer: UserSerializer
end
end
class Api::V1::Auth::SessionsController < DeviseTokenAuth::SessionsController
end
Rails.application.routes.draw do
namespace :api do
namespace :v1 do
resources :users, only: [:show]
mount_devise_token_auth_for 'User', at: 'auth', controllers: {
registrations: 'api/v1/auth/registrations',
# ここの部分ね
sessions: 'api/v1/auth/sessions'
}
end
end
end
class Api::V1::Auth::SessionsController < DeviseTokenAuth::SessionsController
def render_create_success
render json: @resource, serializer: UserSerializer
end
end
Reference
이 문제에 관하여(serializer로 devisetoken auth의 json을 성형한 롤입니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Kanezoh/items/a648ecbdf99b4880885f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)