Devise :: SessionsController#create中的ActionController :: InvalidAuthenticityToken

如何解决Devise :: SessionsController#create中的ActionController :: InvalidAuthenticityToken

我有一个Rails应用程序,只有登录的用户可以访问所有应用程序功能。无法创建或删除用户,只有管理员才能从命令行或种子文件中创建/删除新用户。 Ruby版本是2.5.3,Rails是5.2.2,专门用于身份验证。从4天开始,我一直在开发中遇到这个问题:

Started GET "/manifest.json" for ::1 at 2020-08-16 18:53:26 -0300
Started GET "/serviceworker.js" for ::1 at 2020-08-16 18:53:28 -0300
Started POST "/users/sign_in" for ::1 at 2020-08-16 18:53:29 -0300
Processing by Devise::SessionsController#create as HTML
  Parameters: {"utf8"=>"✓","authenticity_token"=>"****","user"=>{"email"=>"****@gmail.com","password"=>"[FILTERED]","remember_me"=>"0"},"commit"=>"Submit"}
Can't verify CSRF token authenticity.
Completed 422 Unprocessable Entity in 1ms (ActiveRecord: 0.0ms)


  
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):

在此之前,一切工作都很好,并且无需更改我的代码即可开始发生。这似乎仅在 google chrome 的开发环境中发生。我已经运行过Rails服务器,并在其他浏览器(例如Opera和Firefox)中进行了测试,并且开发环境在这些浏览器中仍然可以正常工作。

我尝试做的一些修复:

关闭和打开cookie,清除所有浏览器数据并几次重启pc,重新安装浏览器,删除所有涡轮链接,添加rack-cors gem和一些代码更改,如下所示。

在我的protect_from_forgery with: :exception中将protect_from_forgery prepend: true,with: :exception更改为application_controller.rb

检查在我看来是否有<%= csrf_meta_tags %>。是的。

skip_before_action :verify_authenticity_token添加到application_controller.rb

当我添加skip_before_action :verify_authenticity_token时,似乎可以解决该错误,但是用户仍然无法登录。以下示例:

Started GET "/manifest.json" for ::1 at 2020-08-16 19:12:58 -0300
Started GET "/serviceworker.js" for ::1 at 2020-08-16 19:12:59 -0300
Started POST "/users/sign_in" for ::1 at 2020-08-16 19:13:05 -0300
Processing by Devise::SessionsController#create as HTML
  Parameters: {"utf8"=>"✓","commit"=>"Submit"}
  User Load (0.8ms)  SELECT  "users".* FROM "users" WHERE "users"."email" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["email","****@gmail.com"],["LIMIT",1]]
  ↳ /home/******/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
Redirected to http://localhost:3000/
Completed 302 Found in 135ms (ActiveRecord: 0.8ms)


Started GET "/" for ::1 at 2020-08-16 19:13:05 -0300
Processing by PassthroughController#index as HTML
Completed 401 Unauthorized in 0ms (ActiveRecord: 0.0ms)

我的application_controller.rb是:

class ApplicationController < ActionController::Base
  protect_from_forgery prepend: true,with: :exception
  before_action :authenticate_user!
end

我的User.rb文件:

class User < ApplicationRecord
  devise :database_authenticatable,:rememberable,:validatable
end

我的passthrough_controller.rb

class PassthroughController < ApplicationController
  def index
    path =  case current_user.port
            when '****'
              ****_map_path
            when '***'
              ***_map_path
            else
              new_user_session_path
            end
    redirect_to path
  end
end

我的路线.rb:

Rails.application.routes.draw do
  devise_for :users

  devise_scope :user do
    authenticated :user do
      get '****/map',to: '****#map'
      get '****/report',to: '****#report'
      get '***/map',to:'***#map'
      get '***/report',to:'***#report'
    end

    unauthenticated do
      root to: 'passthrough#index',as: :unauthenticated_root
      get '****/map',to: 'passthrough#index'
      get '****/report',to: 'passthrough#index'
      get '***/map',to: 'passthrough#index'
      get '***/report',to: 'passthrough#index'
    end
  end
end
                  
                   Prefix Verb   URI Pattern                                                                              Controller#Action
         new_user_session GET    /users/sign_in(.:format)                                                                 devise/sessions#new
             user_session POST   /users/sign_in(.:format)                                                                 devise/sessions#create
     destroy_user_session DELETE /users/sign_out(.:format)                                                                devise/sessions#destroy
                     root GET    /                                                                                        passthrough#index
                 ****_map GET    /****/map(.:format)                                                                      ****#map
              ****_report GET    /****/report(.:format)                                                                   ****#report
                  ***_map GET    /***/map(.:format)                                                                       ***#map
               ***_report GET    /***/report(.:format)                                                                    ***#report
     unauthenticated_root GET    /                                                                                        passthrough#index
                          GET    /****/map(.:format)                                                                      passthrough#index
                          GET    /****/report(.:format)                                                                   passthrough#index
                          GET    /***/map(.:format)                                                                       passthrough#index
                          GET    /***/report(.:format)                                                                    passthrough#index
       rails_service_blob GET    /rails/active_storage/blobs/:signed_id/*filename(.:format)                               active_storage/blobs#show
rails_blob_representation GET    /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
       rails_disk_service GET    /rails/active_storage/disk/:encoded_key/*filename(.:format)                              active_storage/disk#show
update_rails_disk_service PUT    /rails/active_storage/disk/:encoded_token(.:format)                                      active_storage/disk#update
     rails_direct_uploads POST   /rails/active_storage/direct_uploads(.:format)                                           active_storage/direct_uploads#create

这是我的新用户会话表格:

  <%= simple_form_for(resource,as: resource_name,url: session_path(resource_name),html: {id: "login-form"} ) do |f| %>
    <div class="form-inputs">
      <%= f.input :email,required: false,autofocus: true,input_html: { autocomplete: "email" } %>
      <%= f.input :password,label: 'Password',input_html: { autocomplete: "current-password" } %>
      <%= f.input :remember_me,label: 'Remember me',as: :boolean if devise_mapping.rememberable? %>
    </div>

    <div class="form-actions session-btn">
      <%= f.button :submit,"Submit" %>
    </div>
  <% end %>

这是我的application.html.erb:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
    <%= render 'shared/head' %>
    <meta property="og:title" content="****" />
    <meta property="og:description" content="*****" />
    <meta property="og:image" itemprop="image" content="******">
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <%= favicon_link_tag asset_path('icon.png') %>
    <title>****</title>
    <%= csrf_meta_tags %>
    <%= action_cable_meta_tag %>
    <%= stylesheet_link_tag 'application',media: 'all' %>
    <link rel="manifest" href="/manifest.json" />
  </head>
  <body>
    <% exclude_navbar_from_views = ['sessions','passwords','registrations'] %>
    <% if exclude_navbar_from_views.include?(controller_name) %>
      <%= yield %>
    <% else %>
      <%= render 'shared/navbar' %>
      <%= render 'shared/flashes' %>
      <%= yield %>
    <% end %>
    <%= javascript_include_tag 'application' %>
    <%= javascript_pack_tag 'application' %>
  </body>
</html>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-