QA@IT
«質問へ戻る

質問を投稿

[初心者/急]Deviseの複数モデルでの、ログイン・サインアップ後のリダイレクト先を個別に設定したい

前提・実現したいこと

Railsでの開発において、gemのDeviseを使用して2つのモデルの認証を実装しました。
そこで、認証後に設定した個別ページへのリダイレクトを実装したいです。

具体的には、Studentsの画面認証後、StudentsのSHOWへリダイレクトを行いたいです。

発生している問題・エラーメッセージ

発生している問題は、
adminのログインボタンを押した後、Userのログイン画面にリダイレクトしてしまっています。

Started POST "/students/sign_in" for 127.0.0.1 at 2017-12-06 17:06:42 +0900
Processing by Students::SessionsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"dydoKPbOPys0//hg1RVbSlYo1kroQxipH5osB10RxVSf0JzsDUb/eBFOnTwVjMC01tNOINEQKrVeS6xWdaGwnQ==", "student"=>{"email"=>"aaa@gmail.com", "password"=>"[FILTERED]"}, "commit"=>"ログイン"}
  Student Load (2.8ms)  SELECT  `students`.* FROM `students` WHERE `students`.`email` = 'aaa@gmail.com' ORDER BY `students`.`id` ASC LIMIT 1
   (0.1ms)  BEGIN
  SQL (0.4ms)  UPDATE `students` SET `current_sign_in_at` = '2017-12-06 08:06:42', `last_sign_in_at` = '2017-12-06 08:03:06', `sign_in_count` = 7, `updated_at` = '2017-12-06 08:06:42' WHERE `students`.`id` = 2
   (2.3ms)  COMMIT
Redirected to http://localhost:3000/students/2
Completed 302 Found in 203ms (ActiveRecord: 5.6ms)


Started GET "/students/2" for 127.0.0.1 at 2017-12-06 17:06:42 +0900
Processing by StudentsController#show as HTML
  Parameters: {"id"=>"2"}
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)


Started GET "/users/sign_in" for 127.0.0.1 at 2017-12-06 17:06:42 +0900
Processing by Users::SessionsController#new as HTML
  Rendering users/sessions/new.html.haml within layouts/application
  Rendered common/_login_logo.html.haml (4.4ms)
  Rendered devise/shared/_links.html.haml (3.9ms)
  Rendered users/sessions/new.html.haml within layouts/application (20.9ms)
  Rendered common/_header.html.haml (16.3ms)
Completed 200 OK in 177ms (Views: 176.0ms | ActiveRecord: 0.0ms)


該当のソースコード

class ApplicationController < ActionController::Base
  before_action :authenticate_user!, :authenticate_student!
  protect_from_forgery with: :exception

  before_action :configure_permitted_parameters, if: :devise_controller?

  def configure_permitted_parameters
    # sign_inのときに、group_keyも許可する
      devise_parameter_sanitizer.permit(:sign_in, keys:[:group_key])
    # sign_upのときに、group_keyも許可する
      devise_parameter_sanitizer.permit(:sign_up, keys:[:group_key])
    #account_updateのときに、group_keyも許可する
      devise_parameter_sanitizer.permit(:account_update, keys:[:group_key])
  end
  def after_sign_in_path_for(resource)
    case resource
    when User
      user_url(resource)
    when Student
      student_url(resource)
    end
  end
end

どのような記述で上記の仕様を実装すればいいでしょうか。
ご回答、よろしくお願いいたします。

Completed 401 Unauthorizedのエラーをはいているのですが
具体的な解決策が見つけ出せません。

### 前提・実現したいこと
Railsでの開発において、gemのDeviseを使用して2つのモデルの認証を実装しました。 
そこで、認証後に設定した個別ページへのリダイレクトを実装したいです。 

具体的には、Studentsの画面認証後、StudentsのSHOWへリダイレクトを行いたいです。


### 発生している問題・エラーメッセージ

発生している問題は、
adminのログインボタンを押した後、Userのログイン画面にリダイレクトしてしまっています。

```
Started POST "/students/sign_in" for 127.0.0.1 at 2017-12-06 17:06:42 +0900
Processing by Students::SessionsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"dydoKPbOPys0//hg1RVbSlYo1kroQxipH5osB10RxVSf0JzsDUb/eBFOnTwVjMC01tNOINEQKrVeS6xWdaGwnQ==", "student"=>{"email"=>"aaa@gmail.com", "password"=>"[FILTERED]"}, "commit"=>"ログイン"}
  Student Load (2.8ms)  SELECT  `students`.* FROM `students` WHERE `students`.`email` = 'aaa@gmail.com' ORDER BY `students`.`id` ASC LIMIT 1
   (0.1ms)  BEGIN
  SQL (0.4ms)  UPDATE `students` SET `current_sign_in_at` = '2017-12-06 08:06:42', `last_sign_in_at` = '2017-12-06 08:03:06', `sign_in_count` = 7, `updated_at` = '2017-12-06 08:06:42' WHERE `students`.`id` = 2
   (2.3ms)  COMMIT
Redirected to http://localhost:3000/students/2
Completed 302 Found in 203ms (ActiveRecord: 5.6ms)


Started GET "/students/2" for 127.0.0.1 at 2017-12-06 17:06:42 +0900
Processing by StudentsController#show as HTML
  Parameters: {"id"=>"2"}
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)


Started GET "/users/sign_in" for 127.0.0.1 at 2017-12-06 17:06:42 +0900
Processing by Users::SessionsController#new as HTML
  Rendering users/sessions/new.html.haml within layouts/application
  Rendered common/_login_logo.html.haml (4.4ms)
  Rendered devise/shared/_links.html.haml (3.9ms)
  Rendered users/sessions/new.html.haml within layouts/application (20.9ms)
  Rendered common/_header.html.haml (16.3ms)
Completed 200 OK in 177ms (Views: 176.0ms | ActiveRecord: 0.0ms)


```

### 該当のソースコード
```ruby
class ApplicationController < ActionController::Base
  before_action :authenticate_user!, :authenticate_student!
  protect_from_forgery with: :exception

  before_action :configure_permitted_parameters, if: :devise_controller?

  def configure_permitted_parameters
    # sign_inのときに、group_keyも許可する
      devise_parameter_sanitizer.permit(:sign_in, keys:[:group_key])
    # sign_upのときに、group_keyも許可する
      devise_parameter_sanitizer.permit(:sign_up, keys:[:group_key])
    #account_updateのときに、group_keyも許可する
      devise_parameter_sanitizer.permit(:account_update, keys:[:group_key])
  end
  def after_sign_in_path_for(resource)
    case resource
    when User
      user_url(resource)
    when Student
      student_url(resource)
    end
  end
end
```
どのような記述で上記の仕様を実装すればいいでしょうか。 
ご回答、よろしくお願いいたします。

__Completed 401 Unauthorized__のエラーをはいているのですが
具体的な解決策が見つけ出せません。