rails3 authlogic-connect unknown attribute: oauth_provider - ruby-on-rails-3

I'm trying to use the authlogic-connect plugin to add oauth support to my web app but I'm getting the error:
unknown attribute: oauth_provider
when UsersController#create is called. It is failing when I try to create a new user from the parameters that are being passed in:
#user = User.new(params[:user])
Sure enough, the parameters include this attribute:
Parameters:
{"utf8"=>"✓",
"authenticity_token"=>"lHX2BTFTd5xITTfY/X8A9R3vca3YaRuHFoWdqy8ZPik=",
"user"=>{"oauth_provider"=>"linkedin"},
"commit"=>"LinkIn"}
From the documentation, I assumed that this was what you are supposed to do:
Second, if you are using Oauth, you must include an input with name oauth_provider
and value twitter or whatever other provider you might want (see example apps for
dynamic example).
Any ideas on how this is supposed to work? All of the example forms are in yaml - which I don't know - and I'm trying to create this from using embedded ruby code. Here's the form that I'm using:
<!-- authlogic-connect hack -->
<%= form_for #user do |f| %>
<%= f.radio_button(:oauth_provider, "linkedin") %>
<%= f.label(:oauth_provider_linkedin, "Link In Fool") %>
<%= f.submit :value => "LinkIn" %>
<% end %>

As Dimitry pointed out, the best answer to this question is to use devise + omniauth instead of trying to get authlogic to work. Authlogic simply doesn't support rails3. I spent at least a week trying to get authlogic to work the way I wanted and I never solved the problem. I then spent a few hours getting devise + omniauth to do exactly what I want (i.e. you can create an account with LinkedIn or on the sight and you can associate them together so that you can login with LinkedIn or with email and password to the same account).

Related

how to post :create from the default update url, rails 3

I'm sure this is pretty basic, but I'm somewhat new to rails and struggling to find a solution via search.
I'm implementing a message model to enable private messaging on a forum. I have the models resource nested within a users resource.
Currently the model works, but I want to enable a user to reply to a private message directly on the message show page. I.e users/1/messages/16 instead of users/1/messages/new. Currently this is the default route for 'update' within the MessagesController. Is there anyway to make the form on this page hit the 'create' action within the controller, instead of the 'update'?
Thanks.
Sure, I would try something like this:
On your show page just add a new form.
<%= form_for :message, :url => new_user_message_path do |f| %>
...
<% end %>
You can check the routes of your application using this command:
bundle exec rake routes
I suggest you to read the rails guide: http://guides.rubyonrails.org/

Rails 3.1 simple_form renaming fields w/o i18n

I've been starting to use simple_form in my rails application, which is quite nice. But I was not able to find a function which allows me to rename a field, without the use of i18n.
I have a radio button in my formular, which allows to choose the delivery type. Controlled by that a few fields need a different naming (but its still the same field with the same information).
(e.g. there's a delivery note which is called weight note or notification depending on the delivery type, but contains the same information).
I checked the readme, the railscast and searched a lot but didn't find a build-in way to do that. One option of course would be to create a special locales file just for that, but that feels a little over the top.
I found my answer in a different question regarding simple_form. After looking for that part in the readme, I also found it there.
<%= simple_form_for #user do |f| %>
<%= f.input :username, :label => 'Whatever name you want..' %>
<% end %>
This also overwrites the name given in the i18n file.

Google suggest and auto complete with jquery/ajax in Rails app

I would like to get some ref to use Jquery in Rails app.
At the moment, I am stuck to find the things to enable google suggest in text box and autocomplete in Rails app. Any help/suggestions/ref would be of great help.
I did a short search on auto-complete with Rails earlier today and these are the best links I found:
http://github.com/crowdint/rails3-jquery-autocomplete and http://github.com/crowdint/rails3-jquery-autocomplete-app
http://blog.jackhq.com/posts/3-how-to-add-jquery-autocomplete-to-your-rails-forms-in-a-restful-way
http://code.google.com/p/jquery-autocomplete/
Edit: I just implemented the first link in my app, works flawless so far. I had minor problems with the documentation though, this works for me (on typing AutoComplete starts after the second character):
Model named Category, has an attribute name:
controller:
class UsersController < ApplicationController
autocomplete :category, :name
...
routes:
get 'users/autocomplete_category_name'
view:
<%= form_tag 'users/index' do %>
<%= autocomplete_field_tag 'address', '', users_autocomplete_category_name_path, :size => 75 %>
<% end %>

Rails login partial in different controller

Hey,
I'm pretty new to rails and for learning effect, I try to implement my own authorization system.
Right now I'm having a Page Controller to control some static pages and nothing more, and a Session Controller where I plan to implement most of the authorization process.
My problem is, I have no clue how to get my partial to use the sessions-controller, when I add it to one of the static pages controlled by the pages controller.
It stated out with this http://ruby.railstutorial.org/chapters/sign-in-sign-out#top but i don't want it on an extra page.
so I tried setting the routes and I got an exception "no path found for '/'" as soon as I deleted "resources :sessions" it worked fine again.
my partial looks like this:
<%= form_for(User.new) do |f| %>
<%= f.submit "Login" %>
<% end %>
there's also a div class="action" block around the submit but can't find out how to escape it
this is included into my home via
<%= render 'sessions/new' %>
Thanks for your help
edit my solution:
I added to routes.rb:
resources :sessions
Furthermore I changed form_for(#user) to
<%= form_for(:session, url => sessions_path)
so this works.
I Highly recommed that you look at the railscast http://railscasts.com/episodes/250-authentication-from-scratch , it will give you an idea how to create authentication without forgetting some important steps.
Then you can use the gem devise which is an excellent authentication gem.
Have you tried putting your functions and everything for authentication within a Session Helpers file? Then, in your Application Controller if you add "include SessionsHelper" this should give you access to all the helper functions from Session that you should need

Devise: NoMethod Error & user_signed_in

I'm trying to use user_signed_in? to add a login area to my rails 3 application using devise 1.1.3 and I get a NoMethodErrorin Rules#index
<% if user_signed_in? -%>
<div id="user_login_box" style="float:right">
<%= current_user.email %> |
<%= link_to 'My info', edit_user_registration_path %> |
<%= link_to 'Sign out', destroy_user_session_path %>
</div>
<% end -%>
I'm not sure what's wrong exactly, but clearly the devise method isn't being used. I'm also fairly (read: really) new to rails and haven't used devise before.
What is the name of the model you generated Devise for?
If you called it something else instead of User, you might want to check out http://groups.google.com/group/plataformatec-devise/msg/67f1eb5a571b6136
I had the exactly the same issue.
undefined local variable or method 'edit_user_registration_path'
However, I have devise :database_authenticatable, but not :registerable. After I added the :registerable everything works!
You seem to be missing the call to devise :database_authenticatable in your User model.
Also, a good way to get started with devise is to look at the excellent RailsCasts by Ryan Bates : Introducing Devise.
It also may happen that your trying to call that route from another engine, so in that case you have to specify the context for that route, like main_app.edit_user_registration_path.