質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

584閲覧

RailsAPIにおけるdeviseでログインした際に、current_userを取得した際に以前にログインしたままのユーザー情報が反映される。

icchie

総合スコア21

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2017/09/12 09:10

##概要
現在、RailsAPIの開発を行っており、クライアント側のフォームからログインするリクエストを送り、showアクション内で、deviseのcurrent_userを利用して現在ログイン中のユーザー情報を反映するという実装をしております。
ユーザーを複数登録したのち、それぞれのアカウント名とパスワードでログインを行なったのですが、以前に登録、ログインを行なったユーザーの情報が反映されています。この問題に関してどのように考えれば良いかご教示いただけますと幸いです。

##疑問点

ログアウト処理もきちんと実装しておかないと、Sessionが残ったままで、別のメールアドレス&パスワードの組み合わせを投げても、以前のユーザー情報が返ってきますので、注意が必要です。

引用http://qiita.com/fuji_syan/items/9593d3ae644cb26a4d28

上のリンクにこのような記述もあったのですが、その場合複数のユーザーが同時にログインした際はどうなるのか疑問に感じました。

##コード
app/controllers/sessions_controller.rb

class SessionsController < ApplicationController skip_before_action :authenticate_user_from_token! def create @user = User.find_by(name: params[:name]) return invalid_name unless @user if @user.valid_password?(params[:password]) sign_in :user, @user render json: @user, serializer: SessionSerializer, root: nil else invalid_password end end def destroy user = User.find(params[:name]) if sign_out(user) render :json => {success: true} else render :json => {success: false} end end private def invalid_name warden.custom_failure! render json: { error: t('invalid_name') } end def invalid_password warden.custom_failure! render json: { error: t('invalid_password') } end end

app/controllers/users_controller.rb

class UsersController < ApplicationController skip_before_action :authenticate_user_from_token!, only: [:create] def show @user = User.find_by(current_user) render json: @user, each_serializer: UserSerializer end ~省略~

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そもそも、セッションが残った状態でログイン画面が出てしまうのが問題に感じます。
同時ログインを許可しないのであれば、ログイン済みのユーザーがログイン画面に遷移した場合は、ログアウト画面に遷移させるのが良いと思います。
逆に、ログインしてないユーザーに対してログアウトの遷移が見られるべきではないでしょう。

投稿2017/09/13 23:11

mtdsnsk

総合スコア789

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

icchie

2017/09/15 06:49

ご回答いただきありがとうございました。 本番環境に移行した際に複数のユーザーがアクセスした時どうなるかわかりませんが、一般的なWebアプリの画面遷移と同様にセッションの有無をGET通信してみてクライアント側の挙動を変えてみるということで対処してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問