使用Devise令牌验证时如何更新没有令牌的用户?

时间:2019-07-23 08:22:08

标签: ruby-on-rails devise-token-auth

作为我应用程序的一部分,当我向其他用户发送邀请时,我需要为新创建的用户设置一堆参数,然后他们甚至需要登录该应用程序。因此,在切换到DeviseTokenAuth(和rails api)之前,我使用了devise,它使我可以从后端进行用户更改。例如,如果我转到控制台并执行user.save,则返回true。

现在切换到DeviseTokenAuth后,我必须在User模型内的关注文件中输入以下内容:

include DeviseTokenAuth::Concerns::User

一旦包含了此内容,就无法从后端对用户进行更改(例如,rails console> user.save返回false)。我假设每次更新用户都需要令牌吗?在特定的控制器操作中,如何跳过此操作,例如,我需要更新用户,而无需用户/客户端实际调用该操作。 (发送令牌)

1 个答案:

答案 0 :(得分:0)

以防其他人遇到此问题:我花了几个小时在黑暗中拍摄,最终才意识到需要用DeviseTokenAuth填充User对象的uid字段。否则,用户将无法更新。即user.save将返回false

就我而言,我正在使用devise_invitable发送邀请,该邀请当前不在DeviseTokenAuth默认值的范围内。因此,当您使用Devise_invitable gem的邀请方法创建新用户时,不会自动设置UID,提供者字段。我只需要添加两行代码发布邀请:

u= User.invite!(params[:email])
u.uid=params[:email] #added
u.provider='email' #added
u.save #added

现在,用户对象可以正常工作,它与令牌本身无关-因此,我先前在问题中所述的假设是humbug。