TimGoulain / tim_app

ruby on rails tutorial
0 stars 0 forks source link

Toujours des doutes sur mon token... #21

Open TimGoulain opened 9 years ago

TimGoulain commented 9 years ago

Suite de notre discussion d'hier: voilà ce que je pense faire:

$ rails g migration CreateRecommendations note:integer comment:string author:string authentication_token:string:index

J'ajoute dans le Gemfile

gem 'simple_token_authentication', '~> 1.0'

Puis

class CreateRecommendations < ActiveRecord::Migration
  def change
    create_table :recommendations do |t|
      t.integer :note
      t.string :comment
      t.string :authentication_token, index: true, unique: true
    end
  end
end

Puis, dans app/models/recommendation.rb :

class Recommendation < ActiveRecord::Base
before_create :generate_secure_token_string
before_save :ensure_secure_token!

belongs_to :jobs 

include Mongoid::Document
  # Devise authentication method
  # Disabled :recoverable, :trackable, :validatable, :registerable, :omniauthable
  devise :invitable, :database_authenticatable,

  ## Token Authenticatable
  acts_as_token_authenticatable
  field :authentication_token

  def generate_secure_token_string
    SecureRandom.urlsafe_base64(25).tr('lIO0', 'sxyz')
  end
end

  def ensure_authentication_token!
    if authentication_token.blank?
      self.authentication_token = generate_authentication_token
    end
  end

J'ai lu sur un forum que devise ne gérait plus le token_authenticatable (https://github.com/plataformatec/devise/wiki/How-To:-Simple-Token-Authentication-Example) : est-ce que ça peut marcher comme ça du coup? Je rajouterai belongs_to :trips quand j'aurais ajouté la possibilité pour un autre utilisateur de laisser un commentaire sur un voyage.

Dans le app\controllers\application_controller.rb j'ajoute

 acts_as_token_authentication_handler_for Recommendation

J'imagine que je devrais ajouter dans le jobs_controller.rb :

params.require(:job).permit(
  :position, :description, :started_at, :ended_at, 
  recommendation_attributes: [:note, :comment, :author],
)

Je n'inclus pas encore la view à ce niveau : que penses-tu déjà de ça ? Je suis sur le bon chemin ou très loin ?

Les points de blocage :

J'avoue être un peu bloqué...

jibai31 commented 9 years ago

Ca me parait bien compliqué... A mon avis tu n'as pas besoin de la gem simple_token_authentication (au passage, Mongoid c'est une alternative à ActiveRecord pour connecter tes modèles aux tables de la base - toi tu utilises ActiveRecord).

Ce que je ferai, dans les grandes lignes :

  1. Tu crées ton modèle Recommendation comme tu l'as fait, mais sans le token.
  2. Tu ajoutes authentication_token:string à Job.
  3. Quand le pvtiste clique sur "Demander une recommendation", rempli l'email et clique "Envoyer", ça génère un token et envoie un mail avec, dans le corps du mail, le lien pour rentrer la recommendation
# app/controllers/jobs_controller.rb
def request_recommendation
  @job = Job.find(params[:id])
  @job.authentication_token = SecureRandom.hex
  @job.save
  email = params[:email]
  UserMailer.recommendation_request(@job, email).deliver
end

# app/views/user_mailer/recommendation_request.html.haml
...
= link_to 'Click here to post an evaluation',
  new_job_recommendation_path(@job, token: @job.authentication_token)

--> /jobs/45/recommendations/new?token=454bea70b8e94a2a6000d4596f81724e

Dans tes routes tu auras rajouté les recommendations sous les jobs :

resources :jobs do
  resources :recommendations
end
TimGoulain commented 9 years ago

Cool merci beaucoup! je vais essayer ça. Cette histoire de token m'a bien déboussolé...

TimGoulain commented 9 years ago

Est-ce que tu penses qu'utiliser Mandrill (https://mandrill.com/about/) pour envoyer l'email de demande de recommandation est une bonne idée? Tu l'as déjà utilisé? Ca s'appuie sur MailChimp

jibai31 commented 9 years ago

Yep, c'est un des plus utilisé. C'est ça qu'on a pour Codeur.com notamment. Je le recommande carrément.