[ROR]JWTを使用した会員加入機能
今回は周りの知り合いとTOYプロジェクトを行うことになりましたが、私が担当している部分はapiサーバー部分です.
どのようなフレームワークで実施するかを考慮すると、最もよく知られているレールを選択しました.設定が完了したら、登録機能を開発する際に使用するJWTを含むJWT実装プロセスに関する記事を書きたいと思います.
1.Gemfileのインストールと適用
まず簡単にGemfileにJWTライブラリを書き込みます.
gem 'jwt'
ライブラリを適用します.bundle install
2.Railsでファイルを作成する
1) lib/json_web_token.rbファイルを追加します.
class JsonWebToken
SECRET_KEY = Rails.application.secrets.secret_key_base .to_s
def self.encode(payload)
payload[:exp] = 15.minutes.from_now.to_i
JWT.encode(payload, SECRET_KEY)
end
def self.decode(token)
decode = JWT.decode(token, SECRET_KEY)[0]
HashWithIndifferentAccess.new decode
end
end
encodeメソッドとdecodeメソッドを追加します.Encodeメソッドは、SCERET KEYおよびpay loadを使用して作成されたJWTタグを生成するためのメソッドであり、decodeの場合、ユーザが受信したタグを解釈するために使用される.
railsがjson web tokenの場合.rbファイルを読み込めない場合
confing/application.次のコードをrbファイルに追加して、すべてのlibファイルをロードできます.
config.autoload_paths += Dir["#{config.root}/lib"]
2) application_controller.rbファイルに追加します.以下に示します.def token_authentication
http_request = request.headers["Authorization"]
auth_token = http_request.to_s.split(" ").last
decode_token = JsonWebToken.decode(auth_token)
@user = User.find(decode_token["user_name"])
rescue JWT::ExpiredSignature => e
render json: { errors: e}, status: :unauthorized
end
appllcation_controller.rbファイルにtoken authenticationというメソッドを作成し、ユーザーが受け取ったタグを説明します.期限切れのタグの場合は、resourceでユーザーに期限切れのタグを通知します.
3) users_controller.rbファイルに追加します.以下に示します.
before_action :token_authentication
def create
user = User.new(user_params)
access_token = JsonWebToken.encode(user_name: user.name)
if user.save
render json: { access_token: access_token}, status: :ok
else
render json: { errors: e}, status: :unauthorized
end
end
private
def user_params
params.permit(:email, :password, :name, :nickname, :sns)
end
私の場合、登録会員のapiを作成しています.ユーザーから取得した名前を使用してJWTタグを作成します.3.ログイン方式を改善する方向は?
上記の場合、access tokenのみが使用されます.
アクセスtokenのみを使用すると、セキュリティリスクが高いため、単独ではなくrefresh tokenとともに使用されます.
そこで、refresh tokenを追加してセキュリティを強化しようとしました.
refresh tokenのストリームを追加
ユーザーがログインすると、2つのaccess tokenとrefresh tokenが発行され、ユーザーに転送されます.
refresh tokenの場合、サーバdbに格納されます.
ユーザがapiを要求するたびにaccess tokenが受信され、有効なトークンであるかどうかを確認します.
acess tokenが期限切れになっていない場合は、クライアントにrefresh tokenを発行し、refresh tokenが有効なタグであることを確認するように要求します.
有効なトークンであればユーザに情報を送信し、期限切れのトークンであればrefresh tokenを比較し、有効なrefresh tokenであればaccess tokenを再発行してユーザに送信する.
Reference
この問題について([ROR]JWTを使用した会員加入機能), 我々は、より多くの情報をここで見つけました https://velog.io/@wooook/ROR-JWT를-이용한-회원가입-기능テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol