module Gigya::Session

This module is a mix-in that makes for much easier Gigya UI integration in Gigya apps. Essentially if you include this, it is very straightforward to do a Gigya login mechanism.

Public Class Methods

included(base) click to toggle source
# File lib/gigya/session.rb, line 4
def self.included(base)
        base.include Gigya::ControllerUtils
        base.extend ClassMethods
end

Public Instance Methods

create() click to toggle source
# File lib/gigya/session.rb, line 13
def create
        gigya_save_jwt(self.class.gigya_token_storage || :cookie)

        if params[:redirect].blank?
                redir = self.class.gigya_after_login_redirect
                case redir
                        when String
                                redirect_to redir
                        when Symbol
                                redirect_to self.send(redir)
                        else
                                redirect_to redir.call
                end
        else
                redirect_to params[:redirect]
        end
end
destroy() click to toggle source
# File lib/gigya/session.rb, line 9
def destroy
        cookies.delete Gigya::ControllerUtils::GIGYA_COOKIE_PARAM
end
new() click to toggle source
# File lib/gigya/session.rb, line 31
        def new
                head_code = <<EOF
<script type='text/javascript' src='https://cdns.gigya.com/js/gigya.js?apikey=#{self.class.gigya_api_key}'></script>
<script type="text/javascript">
        function did_login(evt, resp) {
                form = document.getElementById("hidden-login-form");
                gtok = document.getElementById("gigya-token");

                gtok.value = resp.id_token;
                form.submit();
        }

        var expire_time = #{self.class.gigya_token_expire_time};
        gigya.accounts.showScreenSet({
                screenSet: '#{self.class.gigya_screen_set}',
                startScreen: '#{self.class.gigya_start_screen}',
                containerID: 'gigya-screenset-container',
                deviceType: 'mobile',
                sessionExpiration: expire_time,
                onAfterSubmit: function(evt) {
                        if(evt.form == 'gigya-login-form' && evt.response.errorCode == 0) {
                                gigya.accounts.getJWT({
                                        fields: "#{self.class.gigya_jwt_fields}",
                                        expiration: expire_time,
                                        callback: function(resp) {
                                                did_login(evt, resp);
                                        }
                                });
                        }
                }
        });
</script>
EOF
                body_code = <<EOF
<%= form_tag request.path.gsub('/new', ''), :id => "hidden-login-form" do %>
        <%= hidden_field_tag :redirect, params[:redirect] %>
        <%= hidden_field_tag :gigya_token, "", :id => "gigya-token" %>
<% end %>
<div class="gigya-screenset-class" id="gigya-screenset-container"></div>
EOF

                if self.class.gigya_script_content_for.present?
                        head_code = "<% content_for :#{gigya_script_content_for} do %>#{head_code}<% end %>"
                end

                full_erb = head_code + body_code
                render :inline => full_erb, :layout => true
        end