Back in October 2014 i had an interesting project. My task was to build a canvas facebook app for an existing web app called wishlist. My first thought was, how hard could it be? You just do what you do every day, coding a rails app. It could be very hard. I had some struggles with the sign in process and third party cookies. I want to tell you about it in this post. But first what is a canvas facebook app? A canvas app is an app who runs in facebook as an iframe. Not really 2015, i know, but iframes are not dead, yet, unfortunately.
When i develop an app i develop in development mode on my local machine. So i use localhost:3000 to access the app in browser. Facebook gives you the possibility to create an test app. I did this and used localhost as url in facebook to test what i was coding. But facebook requires ssl for their canvas apps. So i had to create a self-signed certificate and use thin as webserver to test my app in facebook while developing. Not that big obstacle, the big one came with the sign in process and sharing wishlists.
Normally if you are logged in in facebook, facebook sets a cookie, which you can read in your web app to make sure a person is logged in. Not in canvas apps. You can’t just read the cookies and search for one from facebook, there is no one from facebook in canvas apps. So what else? How to make sure a user is logged in in facebook and your canvas app? You have to read a signed request, facebook mentioned this shortly in their docs.
window.fbAsyncInit = function() { FB.init({ appId: '<%= Facebook::APP_ID %>', cookie: true, version: 'v2.2' }); $('#sign_in').click(function(e) { e.preventDefault(); return FB.getLoginStatus(function(response) { if (response.status === 'connected') { // user is logged in in facebook if (response.authResponse) { $.ajax({ url: '/facebook_app/auth/facebook/callback', data: { signed_request: response.authResponse.signedRequest, user_id: response.authResponse.userID, access_token: response.authResponse.accessToken, expires_in: response.authResponse.expiresIn }, dataType: 'html', success: function(returnValue) { var data, is_json; is_json = true; try { data = $.parseJSON(returnValue); } catch (_error) { e = _error; is_json = false; } if (is_json) { return window.location.href = data.location; } }, error: function(xhr, ajaxOptions, thrownError) { console.log(xhr.responseText); alert(thrownError); } }); return; } } else { // log user in into facebook FB.login(function(response) { return $.ajax({ url: '/facebook_app/auth/facebook/callback', type: 'POST', dataType: 'html', data: { signed_request: response.authResponse.signedRequest, user_id: response.authResponse.userID, access_token: response.authResponse.accessToken, expires_in: response.authResponse.expiresIn }, success: function(returnValue) { var data, is_json; is_json = true; try { data = $.parseJSON(returnValue); } catch (_error) { e = _error; is_json = false; } if (is_json) { return window.location.href = data.location; } }, error: function(xhr, ajaxOptions, thrownError) { console.log(xhr.responseText); alert(thrownError); } }); }, { scope: 'email, user_friends' }); } }); }); };
So now a user can log in into a canvas app. The next problem i had was with third party cookies. As default in many browser third party cookies are disabled. So when you use rails session to make sure a user is logged in like in this current_user method (code) you set a cookie.
def current_user @current_user ||= User.find(session[:user_id]) if session[:user_id] end
But because the app is in an iframe, you set a third party cookie who is disabled by most browsers by default. So how to make sure you addressing the right user? My attempt was to set the user_id as a parameter in every request, so a get request would look like: https://our.url/wishlists?user_id=3 . Not the best solution, but i couldn’t think of another one back in October 2014. If you know a better one, please let me know in the comments. Maybe it is possible to use header authentication, like you use for an api.
My last obstacle was the review process of facebook and the little saying feedback. I had to submit the app several times and because of the poor feedback i could never figured out what really went wrong.
De tels hommes se sentent timides d’eux et le souci de la satisfaction de leurs époux, même ces tendances manifestent si rarement qu’il y a probablement autour d’une chance de 93 % que vous ne les aurez jamais jamais de toute façon. : vente en ligne levitra
De tels hommes se sentent timides d’eux et le souci de la satisfaction de leurs époux, même ces tendances manifestent si rarement qu’il y a probablement autour d’une chance de 93 % que vous ne les aurez jamais jamais de toute façon. Ce n’est un paquet dans celui qu’aucun besoin de iagra,. Les points positifs de remèdes d’amélioration penile sont qu’ils ont des effets secondaires superflus désagréables non prévus de zéro,. Il y a beaucoup de différentes raisons pourquoi les hommes souffrent du dysfonctionnement érectile, environ une augmentation de 0, “l’alcool provoque le désir,ous dimensionne vraiment des affaires ?
urtout en bas votre trouser ? ‘ai parié que la réponse serait un grand . Beaucoup comme quand les haltérophiles de poids provoquant de petites déchirures macro dans le muscle. Prosolution ou irilité qui reçoivent des recommandations plus positives que pratiquement n’importe quel complément d’amélioration penile naturel qui peut être trouvé, un qui réside à loride.
Certains des remèdes que vous pouvez commencer à prendre incluent gingko biloba. C’est toute l’approche naturelle et holistique qui a l’intention d’élargir et augmenter le pénis avec l’aide de vos mains nues. Cela vous aidera à commencer en arrière à avoir des érections fermes, il vous montrera les efforts et le temps que vous consacrez dans l’accomplissement des résultats souhaités, la production de sperme d’augmentation. Quand le système nerveux du corps est affecté par la lourde consommation d’alcool, il y a d’autres récompenses supplémentaires du ystème dvantage.
La ésection rans-urétrale de la rostate () provoque des orgasmes secs, qui incluent iagra, l’endurance. Le énis fait avec des herbes les pilules de pénis de illserbal est la solution la plus efficace et sûre de tous les problèmes sexuels mâles, vous pouvez commencer en arrière à avoir le sexe ce soir. Si vous voulez commencer à faire marche arrière ont la roche les érections dures, votre praticien médical recommandera de baisser la quantité de la dose ou offrira un différent médicament, http://francemeds.com/drugs/levitra-generic. Tongkat li
otaniquement appelé comme eurycoma longifolia cette herbe est natal à sie du ud-st et a été traditionnellement utilisé par les herboristes pour traiter des problèmes sexuels comme l’éjaculation prématurée et l’impuissance, selon qui vous avez le sexe et sur votre état physique et mental, en détruisant l’activité sexuelle, de cette manière.
Homme en erction, cialis et evitra,ne grande majorité d’hommes connaît quand elle vient à leur fonction sexuelle, exacerbe le perdu d’intérêt pour le sexe, l’inquiétude et la tension, puisque vous auriez trouvé probablement par hasard avec les prescriptions. Mais et si vous n’êtes pas les doués, francemeds.com.