我尝试配置我的rails应用程序,以便能够通过JSON请求执行sign_in(该部分看起来工作),之后我不想被重定向,我只想让sign_in返回一个JSON与用户电子邮件和其他一些东西。
有人可以告诉我该怎么做吗? 我使用这个gem token authentication和设计的最后一个版本的rails。
目前我已经创建了一个自定义会话控制器,但我不知道该放入什么内容。 我是rails的新手,所以也许很容易,但我找不到最新的答案。
感谢的
更新:有关信息,我的主要目标是在sign_in成功后取回与用户关联的身份验证令牌
答案 0 :(得分:3)
覆盖Devise :: SessionsController的会话创建方法
在app / controllers / users / sessions_controller.rb中添加一个控制器文件,并继承Devise :: SessionsController,如下所示。
class Users::SessionsController < Devise::SessionsController
def create
self.resource = warden.authenticate!(auth_options)
set_flash_message(:notice, :signed_in) if is_flashing_format?
sign_in(resource_name, resource)
yield resource if block_given?
respond_with resource, :location => after_sign_in_path_for(resource) do |format|
format.json {render :json => resource } # this code will get executed for json request
end
end
end
在路由中添加以下内容以考虑继承的User :: SessionsController
devise_for :users, :controllers => { :sessions => 'users/sessions'}
答案 1 :(得分:2)
您还可以使用yield块创建其他代码并在返回重定向命令之前返回
Dim a As Variant
a = Array(1, 1, 1, 1, 1, 1, 1, 1, 1)
def create
super do
render json: { user: current_user,
token: form_authenticity_token }.to_json and return
end
end
将阻止控制器在yield块之后继续。
and return
- 我必须在登录后重置标头中的csrf-token。这是获取新csrf-token的一种方法。