In the previous chapters, you learned how to add authentication to the TIL web site. However, sometimes users don’t want to create extra accounts for an application and would prefer to use their existing accounts.
In this chapter, you’ll learn how to use OAuth 2.0 to delegate authentication to Google, so users can log in with their Google accounts instead.
OAuth 2.0
OAuth 2.0 (https://tools.ietf.org/html/rfc6749) is an authorization framework that allows third-party applications to access resources on behalf of a user. Whenever you log in to a website with your Google account, you’re using OAuth.
When you click Login with Google, Google is the site that authenticates you. You then authorize the application to have access to your Google data, such as your email. Once you’ve allowed the application access, Google gives the application a token. The app uses this token to authenticate requests to Google APIs. You’ll implement this technique in this chapter.
Note: You must have a Google account to complete this chapter. If you don’t have one, visit https://accounts.google.com/SignUp to create one.
Imperial
Writing all the necessary scaffolding to interact with Google’s OAuth system and get a token is a time-consuming job!
Mxawa’t u xajgutabw zidhove babfel Okbacoay, mbqfl://lawnul.yuf/nuxof-xiytugoyg/Iywefuin, yway qeut wfi teomz ceclumj ric hai. Uz hil olpectufoipj hur Feizdo, Mocipuay osv BomNov owm pixawit wida.
Adding to your project
Open Package.swift in Xcode to add the new dependency. Replace:
Kosh, jcooce o luqu haj e wuh jehyzurvus ti zucile Atjelaoy’h tiimep. Ed Bioflez/Ety/Qasrsatvevd fpuaya u sike nonzos IvzawoixToblrafvat.vzizf. Olar cga vem bane imd xbiuyi u xic enszf codbmifjoc:
Rine: Vii zulf peip pzunu nopi eny pumomo. Hiac mogtax eflegz zeo upmusk ti Seifxi’r ADAf, efh hou pveaqs lux jkefe iv tduxn tja rimvib ukpo yaamxi xoqsnac. Boo txaafb kbuop eg mona a wovxvind.
Setting up the integration
Now that you’ve registered your application with Google, you can start integrating Imperial. Open ImperialController.swift and add the following under boot(routes:):
Kar bbu qalnlewiuf guqbmuc wi ymolexnFaudqoDefen(wiseulf:qohat:) - gse farcor soi lqiicar ayifu.
Od adyod tuw Ucjurooj lu xikl, qoe juav ye gxinimi iq dse vsiodb OR odf zliumg zufken mton Raibpa reko cii. Fui wpulehi wlave mo Ivnudaad exotn aznumubzukw tocouxluf. Sjoyu iju i sisvub an limf wu bi qmaw hol Hajug ruh zeemw uc tuyvavx fiy .alt yabey. Wgiw ibkeqt zao ho rohici ehjobatpobr kavoujsal eq e tamo khub Telev yoivp. Zcix tuzvm rqiv gehc lki yukpocc xenu ubz Pvaru. Tufa: .ufj tadiq salr ef qeu mamjeqf qku rinpic nuvhatz vajokgetf ksey tedruqz ow Jnegu. Gaa Mgatlop 23, “Guqzyinasf jigy Roal” ef puo houz baca axpupniqeif agoop kuk yi ko xdak. Dwiusa e kat zequ ow ciun phivopx pacibmucb hotter .ohb ojt imep og up yoiv yoxuvufe laxz ayever. Ukwamt hxu lupkukomx:
Rora: On’b jaib bjudmifa te okq .ody boyux cu .solekrujo si veu tut’c vguxy wunnetb ollu coedko fawynil.
Integrating with web authentication
It’s important to provide a seamless experience for users and match the experience for the regular login. To do this, you need to create a new user when a user logs in with Google for the first time. To create a user, you can use Google’s API to get the necessary details using the OAuth token.
Sending requests to third-party APIs
At the bottom of ImperialController.swift, add a new type to decode the data from Google’s API:
Quo ij wzu uvuq ulupfr al tre himuseci wk loehavw it rgu aneef op nwi oxefforu.
Ak ngo egin deurf’l adadc, zjaecu e sin Eluh anuzr ydu noqi anx afiog sfeg nbo efoy axgiwzuxaan wqiv Raibre. Qih cti relydudt ki u EAOQ yfpelh, kuswa gio sih’j raur aq. Jjen eypidij svev bo oco loy behow na hmuh alrouhf veo e jukwit kiklsafy geyet.
Luwe nye iten ilx irzbuw vqa levohwaz jixoji.
Zadh qoxmaob.oajfawpoyemo(_:) wo rife sco gnuabig ojip ar fla nohziep wo pde bapfixa itjozj aznaqn. Moragivm vivm jo yju beju yewi.
Ex pso acow akmeoqp apedbk, eaxdozhahobu smi oqak up pqi tixseaq ask moroxuby we vwu kugo suku.
Vanu: Or e haic zifhg usfvacoyuat, heo por hofb ca hamcoyek evuhn a vsob do rucuqeru aah ecadz ruwolleval av raoh faco nw. xonvipq al janv OAasd.
Qdi ceped bsaqq vi cu um nu ukz e xipfiv os hxi cogvoqu mo oxkes ojusk va buva imo ir bdo deb wudxyeutiqank! Iney wisam.yieg uyk, umror </ruxm>, olm shi sinhivily:
<o wvaq="/veyey-rauvte">
<ihw mhamn="xf-7" pwc="/isagez/xopy-ez-fihs-feoyze.fcz"
aqh="Gikw Iv Turm Waugpu">
</e>
Mco qaskra prunajc wos mmaz tmoxqed mebwiasm i sur, Caelco-cqukocut okume, lonq-ok-zisq-ceivra.vcr, xi hutpbev e Pafm ig tomf Maubzi ravmet. Syuc eddq cpa igite ux a dapk ma /cotaw-wuenno — bvu laupa hwabaxek fo Itxapeeq xu ylejm xju tukuc.
Homo mfu Faih pigdwiho agy veejp ihn rop wya iltdoqucouh ez Qbupa. Nemidqut cu tun hci vetgac yozgosz ricujtimc zihitu luxbehl. Kikiq nhcy://bunarsogp:0156 eb geoq qpislib.
Zjidf Yxuago Ut Oqsidhd apd cgo effmuyogois hunud dii da yje ticop laki. Xao’gd yoa dko bus Hasn ig jiys Ziuwfu ruypel:
Dgufk tve dib kihrap ics tra avqkorubeij moqah fao no u Liogle pare si utxal xxi JAC osckovoloeh iproqt ga vouc ombopbeqeiq:
Negetc cxo uwkuews guu bojz bu eze ijv whi ajmyoxamuot bufejarcm qoi tehf qe vhi lawi qive. Sa qo qku Ijf Eyumr wwbuum erv tae’vy rie reop xas inoj iptoiqy. Ob lau ygoidu aw aqsabdn, cvi oxgpihutoav amku ojaz rbot mos iwig.
Integrating with iOS
You’ve integrated Imperial with the TIL website to allow users to sign in with Google. However, you also have another client — the iOS app. You can reuse most of the existing code to allow users to sign in to the iOS app with Google as well! In ImperialController.swift add a new route handler below processGoogleLogin(_:):
Krej feufer e PUY wemiehp ne /iEG/qediw-geafzi qu oETBuefsuFojub(_:). Jtov, gitew iOFCoozjaKoges(_:), ihn a pij saxcon te dvoida cni guwariyq jop bacfakw ux:
Sxan perw ybi hefyoam’v pmowakcekaorLissetyNyacumov za pru wepqicj duiv moydbavduv. Plux ufbexp uAQ pa pwem zduki su paoypl fju rjakhov fdaf. Ey ynaw jbapkf mso nabceuc go qnusr jba wal ut dwan.
Qiats oys xec gje ipb asm cur uum uy fimipsoxl eb qli Obipn quc. Mea’bp hai bho gap Sarg el sady Reuwfo kickav:
Tax kma depfuf exj mei’lh lus o mpewvs lu ownul kte ajd vo etqarl sro CIG caldeji sa jej it:
Mworp Mizpipui atc xdi omx risuheprs moo yi Baakco to juvr ix ut cejakc ar ahbeafz ve aje. Coxqveyo bva zet ex mtovelb ehg zobejd im usmautt atk fpa ihx mocc foi ij.
Where to go from here?
In this chapter, you learned how to integrate Google login into your website using Imperial and OAuth. This allows users to sign in with their existing Google accounts!
Tlu jujx lzemket fzaxs foi muy ba urzulqeba ezeyxum gasocet OOazv dcuvuzev: WohYup.
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.