Jak*_*pyś 5 ruby authentication ruby-on-rails devise
我有一个问题 - 最近我用 devise gem 创建了用户。遗憾的是,“sign_in”按钮并没有真正正常工作 - 访问 sin_in 页面并单击“sign in”按钮后没有任何反应!如果我输入电子邮件和密码进行登录并不重要。我检查了日志,单击注册按钮后,日志中或运行服务器的终端上没有任何更改!所以我猜它不会发送任何请求?但问题仅在我第一次访问登录页面后出现,刷新后一切按预期工作。请帮助我,我不知道什么可能会导致这种奇怪的行为。
编辑:奇怪的是,我注意到只有在从主页前往登录页面后才会出现问题 - 如果我只需输入其地址而不是单击浏览器中的链接来进入登录页面,它就会起作用。但是两个操作之后的地址是相同的,所以我不知道......有我欢迎的观点:
<div id="homepage">
<header class="cf">
<h1 class="logo"><%= link_to "E-LEARN", "#" %></h1>
<nav>
<ul>
<li><%= link_to "Watch guides", root_path %></li>
<% unless user_signed_in? %>
<li><%= link_to "Log In", new_user_session_path %></li>
<% else %>
<li><%= link_to "Log Out", destroy_user_session_path, method: :delete %></li>
<li><%= link_to "Settings", edit_user_registration_path %></li>
<li><%= link_to "My Account", current_user %></li>
<% end %>
<li><%= link_to "Add tutorial", "#" %></li>
</ul>
</nav>
</header>
<div class="wrapper-skinny" id="welc">
<h1>Learn programming from others, or share your experience with novices.</h1>
</div>
<div class="buttons">
<%= link_to "Learn something", new_user_registration_path , class: "button button-highlight" %>
<%= link_to "Share experience", "#", class: "button button-dark"%>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
有我的文件:
应用程序控制器:
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :description, :email, :password, :password_confirmation, :current_password) }
end
end
Run Code Online (Sandbox Code Playgroud)
移民:
class DeviseCreateUsers < ActiveRecord::Migration
def change
create_table(:users) do |t|
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
t.integer :sign_in_count, default: 0, null: false
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.string :current_sign_in_ip
t.string :last_sign_in_ip
## Confirmable
# t.string :confirmation_token
# t.datetime :confirmed_at
# t.datetime :confirmation_sent_at
# t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
t.timestamps null: false
end
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
# add_index :users, :confirmation_token, unique: true
# add_index :users, :unlock_token, unique: true
end
end
Run Code Online (Sandbox Code Playgroud)
用户.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :guides
validates :username, presence: true, length: { minimum: 5 }
end
Run Code Online (Sandbox Code Playgroud)
路线:
Rails.application.routes.draw do
root to: 'welcome#index'
devise_for :users
resources :users, only: [:show, :index] do
resources :guides
end
end
Run Code Online (Sandbox Code Playgroud)
和宝石文件:
source 'https://rubygems.org'
gem 'rails', '4.2.2'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'sqlite3'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'bcrypt', '~> 3.1.7'
gem 'devise', '~> 3.5', '>= 3.5.2'
gem 'paperclip', '~> 4.3', '>= 4.3.1'
group :development, :test do
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
end
group :development do
gem 'sqlite3'
end
group :production do
gem 'pg', '0.17.1'
gem 'rails_12factor'
end
Run Code Online (Sandbox Code Playgroud)
路线:
Prefix Verb URI Pattern Controller#Action
root GET / welcome#index
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
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
user_guides GET /users/:user_id/guides(.:format) guides#index
POST /users/:user_id/guides(.:format) guides#create
new_user_guide GET /users/:user_id/guides/new(.:format) guides#new
edit_user_guide GET /users/:user_id/guides/:id/edit(.:format) guides#edit
user_guide GET /users/:user_id/guides/:id(.:format) guides#show
PATCH /users/:user_id/guides/:id(.:format) guides#update
PUT /users/:user_id/guides/:id(.:format) guides#update
DELETE /users/:user_id/guides/:id(.:format) guides#destroy
users GET /users(.:format) users#index
user GET /users/:id(.:format) users#show
Run Code Online (Sandbox Code Playgroud)
和我的登录视图(devise/sessions/new.html.erb):
<%= render 'shared/header' %>
<div class="banner" >
</div>
<div class="wrapper-skinny">
<h2>Log in</h2>
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true %>
</div>
<div class="field">
<%= f.label :password %><br />
<%= f.password_field :password, autocomplete: "off" %>
</div>
<% if devise_mapping.rememberable? -%>
<div class="field" id="checkbox">
<%= f.check_box :remember_me %>
<%= f.label :remember_me %>
</div></div><br>
<% end -%>
<div class="actions">
<%= f.submit "Log in" %>
</div>
<% end %>
<%= render "devise/shared/links" %>
</div>
Run Code Online (Sandbox Code Playgroud)
小智 5
看起来像涡轮链接问题。
false这样:= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => false
= javascript_include_tag 'application', 'data-turbolinks-track' => false
或删除它们。
//= require turbolinks从 app/assets/javascripts/application.js 中删除