Bonjour à tous et à toutes,
je m’entraîne à utiliser rails. J'ai créé un système authentification pour l'utilisateur, évidemment il peut accéder à ces informations. Mais s'il est connecté, il peut aussi les modifier. Et c'est à partir de ce moment que je connais un problème, la redirection avec le patch fonctionne bien mais il n' y a aucune modification de son pseudo. L'utilisateur a beau rentrer son nouveau pseudo, il ne se modifie pas.
Voici mon code dans le controller sessions :
class SessionsController < ApplicationController
def new
end
def show
@page = User.find(params[:id])
end
def update
User.find(params[:id]).update name: params[:name]
redirect_to "/profil/#{current_user.id}"
end
def create
user = User.find_by_email(params[:email])
# If the user exists AND the password entered is correct.
if user && user.authenticate(params[:password])
# Save the user id inside the browser cookie. This is how we keep the user
# logged in when they navigate around our website.
session[:user_id] = user.id
redirect_to '/'
else
# If user's login doesn't work, send them back to the login form.
redirect_to '/login'
end
end
def destroy
session[:user_id] = nil
redirect_to '/login'
end
end
Voici mon code dans le show:
<h1>Profil</h1>
<% if current_user && @page.id == current_user.id %>
<%= form_tag "/profil/#{@page.id}", method: "patch" do %>
<ul>
<li><input type="text" name="name" value="<%= current_user.name %>" /></li>
<li><%= image_tag current_user.avatar.url(:thumb) %></li>
<input type="submit" value="Enregistrer mon profil" />
</ul>
<% end
else
%>
<%= @page.name %>
<br>
<%= image_tag @page.avatar.url(:thumb) %>
<% end %>
Voici ma routes :
Rails.application.routes.draw do
get 'sessions/new'
get 'users/new'
# For details on the DSL available within this file, see <a href="http://guides.rubyonrails.org/routing.html" rel="nofollow">http://guides.rubyonrails.org/routing.html</a>
get '/signup' => 'users#new'
post '/users' => 'users#create'
get '/login' => 'sessions#new'
post '/login' => 'sessions#create'
get '/logout' => 'sessions#destroy'
get '/profil/:id' => 'sessions#show'
patch '/profil/:id' => 'sessions#update'
end
Après plein d'essais, je n'arrive toujours pas à trouver mon erreur.
Merci de m'éclairer ^^
Merci Advancid, à priori cela fonctionne cependant je ne mets pas encore en résolu car il me reste deux trois trucs à régler pour finir le système d'authentification, et encore merci !
Bonjour,
je rencontre un nouveau problème et cela fait bien quatres heures que je regarde mon code et que je ne sais pas comment le régler.
Je suis donc toujours dans mon système d'authentification mais lorsqu'un utilisateur s'inscrit, je souhaite controler les informations qu'il envoie. Par exemple, il n'a pas droit de mettre un pseudo qui existe déjà en base de donnée. Mais je n'y arrive tout simplement pas.
Voici mon new
<h1>Signup!</h1>
<%= form_for :user, url: '/users' do |f| %>
Name: <%= f.text_field :name %>
Email: <%= f.text_field :email %>
Password: <%= f.password_field :password %>
Password Confirmation: <%= f.password_field :password_confirmation %>
<%= f.file_field :avatar %>
<%= f.submit "Submit" %>
<% end %>
et mon controller
class UsersController < ApplicationController
def new
end
def create
@users = User.all
@cunter_name = 0
@users.each do |user|
if user.name == params[:name]
@cunter_name = 1
end
end
if @cunter_name == 0
user = User.new(user_params)
if user.save
session[:user_id] = user.id
flash[:success] = "Inscription réalisé avec succès"
redirect_to '/login'
else
redirect_to '/signup'
end
else
redirect_to '/signup'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
end
Quand je rentre un pseudo déjà en base de donnée, il réalise quand même l'inscription. j'en déduis donc params[:name] ne vaut rien que dois-je mettre à la place ?
Ou si ma déduction est fausse comment dois-je faire ?
Merci d'avance pour vos réponses
Merci et je pense que ça sera me dernère question comment puis-je afficher l'erreur à l'utilisateur ?
J'ai vu que l'on pouvait faire cela :
validates :name, presence: { message: "Vous avez oubliez d'entrer votre mot de passe ^^" }
Mais je ne sais pas comment l'exploiter dans ma page d'inscription.
Merci d'avance