Я использую devise_ldap и devise_ldap для проверки своих рельсов. Я пытаюсь использовать встроенный помощник, текущий пользователь для отображения электронной почты пользователей на странице приветствия моего приложения. Это код, который я пытался использовать для:Не удается получить доступ к «текущему пользователю» в рельсах
<% if user_signed_in? %>
<div>Signed in as... <%= current_user.email %></div>
<% end %>
при входе в приложение, я получаю сообщение об ошибке;
undefined method `email' for nil:NilClass
Вот мой routes.rb
Rails.application.routes.draw do
devise_for :users
resources :users
resources :systems do
member do
get :targets, :sources
end
root 'systems#index'
end
и мой контроллер пользователей:
class UsersController < ApplicationController
authorize_resource
before_action :set_user, only: [:show, :edit, :update, :destroy]
# GET /users
def index
@users = User.all.order("display_name asc")
end
# GET /users/1
def show
end
# GET /users/new
def new
@user = User.new
end
# GET /stories/1/edit
def edit
respond_to do |format|
format.html
format.js
end
end
# POST /stories
def create
@user = User.new(user_params)
respond_to do |format|
puts 'user controller'
if @user.save!
format.html { redirect_to user_path(@user), notice: 'User was successfully created.' }
else
format.html { render :new }
end
end
end
# PATCH/PUT /stories/1
def update
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to user_path(@user), notice: 'User was successfully updated.' }
else
format.html { render :edit }
end
end
end
# DELETE /stories/1
def destroy
@user.destroy
respond_to do |format|
format.html { redirect_to users_path notice: 'User was successfully destroyed.' }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params.require(:user).permit(:display_name, :email, :username)
end
end
мои пользователи модели:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
before_create :rememberable_value
before_save :get_ldap_values
devise :ldap_authenticatable, :rememberable, :trackable, :validatable
def get_ldap_values
if self.username
self.email = Devise::LDAP::Adapter.get_ldap_param(self.username,"mail").first if Devise::LDAP::Adapter.get_ldap_param(self.username,"mail")
self.display_name = Devise::LDAP::Adapter.get_ldap_param(self.username,"displayName").first if Devise::LDAP::Adapter.get_ldap_param(self.username,"displayName")
end
end
# def role?(role)
# return !!self.roles.find_by_name(role.to_s.camelize)
# end
def email_required?
false
end
def email_changed?
false
end
def rememberable_value
self.remember_token ||= Devise.friendly_token
end
def name_to_display
if self.display_name
self.display_name
else
self.username
end
end
def password_required?
false
end
def password_match?
self.errors[:password] << "can't be blank" if password.blank?
self.errors[:password_confirmation] << "can't be blank" if password_confirmation.blank?
self.errors[:password_confirmation] << "does not match password" if password != password_confirmation
password == password_confirmation && !password.blank?
end
end
Я не уверен, что я отсутствует, чтобы иметь доступ к текущей информации о пользователях a осле успешный вход
Update
Вот новый файл маршрутов:.
Rails.application.routes.draw do
devise_scope :user do
get '/users/sign_out' => 'devise/sessions#destroy'
get "https://stackoverflow.com/users/sign_in" => "devise/sessions#new"
# delete "/logout" => "devise/sessions#destroy"
end
devise_for :users
authenticate(:user) do
resources :users
resources :reports
resources :change_logs, only: [:index, :show]
resources :systems do
member do
get :targets, :sources
end
resources :change_logs, module: :systems
resources :components do
resources :change_logs, module: :components
end
resources :c_relations
end
resources :integrations
get '/static_pages/home' # => 'static_pages#home', as: 'home'
root 'systems#index'
end
- это метод «user_signed_in?» Или вы его написали? Если это первый, вы можете предоставить его тело? –
- метод разработки; Чтобы проверить, был ли пользователь подписан, используйте следующий помощник: user_signed_in? – saltlife31496
Исходя из исходного кода, кажется, что user_signed_in? метод динамически определяется как '{mapping} _signed_in?'. Вы случайно пересилили (это слово?) Опцию 'devise_mapping' в вашем приложении application_helper? (... или ответ @Matt) –