Slide 1

Slide 1 text

3FBDU"84Ͱ ձһܥ41"Λ࡞ͬͯΈͨ࿩ 3FBDULZPUPWPM

Slide 2

Slide 2 text

w 8 P S E # F O D I ژ ౎ Ϟ σ Ϩ ʔ λ w 8 P S E 1 S F T T ೔ ຊ ޠ ϑ Υ ʔ ϥϜ ੈ ࿩ ໾ w 8 P S E $ B N Q ,Z P U P ࣮ ߦ ҕ һ ௕ )JEFUBLB0LBNPUP %JHJUBMDVCF%FWFMPQFS

Slide 3

Slide 3 text

w 4FNBOUJD6*3FBDU w 3FBDU3PVUFS W w "NB[PO$PHOJUP*EFOUJUZ4%, ࠓ೔঺հ͢Δ΋ͷ

Slide 4

Slide 4 text

l z ʮ΍ͬͯΈͨܥʯ ͳͷͰ݁࿦ͳͲͳ͍

Slide 5

Slide 5 text

w 3JPUͰ࡞͍ͬͯͨϓϩδΣΫτΛ3FBDUʹ͍ͨ͠ w Ϟʔμϧͱ͔ϓϩάϨεόʔͱ͔ཉ͍͠ w άϦουͱ͔͋Δͱࣗ༝౓ߴ͍͍ͯ͘ΑͶ ΍Γ͔ͨͬͨ͜ͱ

Slide 6

Slide 6 text

4FNBOUJD6*3FBDU IUUQTSFBDUTFNBOUJDVJDPNJOUSPEVDUJPO

Slide 7

Slide 7 text

w 4FNBOUJD6*ͷ3FBDU൛ w 5IFP⒏DJBM3FBDU*OUFHSBUJPO w 4FNBOUJD6*ͷK2VFSZ࣮૷ΛϦϓϨΠε w DPMVNOͷ(SJE͋Γ 4FNBOUJD6*3FBDU

Slide 8

Slide 8 text

ίϯϙʔωϯτͷ࢖͍ํ Download Download ͜͏ͳΔˣ

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

w ձһઐ༻ϖʔδΛ࡞Γ͍ͨ w ೝূͰ͖͍ͯͳ͍࣌͸ϦμΠϨΫτ͍ͤͨ͞ w 63-௚ୟ͖Ͱձһϖʔδʹ͍͖͍ͨ w Ͱ͖Ε͹ίʔυαϯϓϧ΋ཉ͍͠ ΍Γ͔ͨͬͨ͜ͱ

Slide 11

Slide 11 text

3FBDU3PVUFS IUUQTSFBDUUSBJOJOHDPNSFBDUSPVUFS

Slide 12

Slide 12 text

WFSTJPOͰ݁ߏ͔Θͬͨ import { BrowserRouter as Router, Route, Link } from 'react-router-dom' $ npm install react-router ͔Β $ npm install react-router-dom ʹมߋ͞Ε͍ͯΔɻ

Slide 13

Slide 13 text

ϩάΠϯɾϩάΞ΢τͷίʔυαϯϓϧ IUUQTSFBDUUSBJOJOHDPNSFBDUSPVUFSXFCFYBNQMFBVUIXPSLqPX

Slide 14

Slide 14 text

#SPXTFS3PVUFSͰϋϚͬͨͱ͜Ζ ./node_modules/webpack-dev-server/bin/webpack-dev- server.js \ —history-api-fallback w JOEFYIUNM΁ͷϦμΠϨΫτ͕ඞཁ w /HJOYͷϦόϓϩͱ͔͠ͳ͍ͱʹͳΔ w XFCQBDLEFWTFSWFS͸ҎԼͷΑ͏ʹ͢Δ

Slide 15

Slide 15 text

/FUMJGZͰϗετ͢Δ৔߹ /* /index.html 200 w @SFEJSFDUTϑΝΠϧͰϦμΠϨΫτͰ͖Δ w JOEFYIUNMͱಉ͡֊૚ʹઃஔ͢Δ͚ͩ w ϑΝΠϧͷத਎͸ҎԼͷΑ͏ʹ͢Δ

Slide 16

Slide 16 text

w ձһपΓͷ࣮૷ͨ͘͠ͳ͍ w 4%,ͱ͔͋Δͱخ͍͠ΑͶ w Ͳ͏ͤͳΒίʔυαϯϓϧ΋͋Δͱ࠷ߴ ΍Γ͔ͨͬͨ͜ͱ

Slide 17

Slide 17 text

"NB[PO$PHOJUP*EFOUJUZ4%, IUUQTHJUIVCDPNBXTBNB[PODPHOJUPJEFOUJUZKT

Slide 18

Slide 18 text

"NB[PO$PHOJUP IUUQTBXTBNB[PODPNKQDPHOJUP

Slide 19

Slide 19 text

w "84$PHOJUP ձһج൫ ͷͨΊͷ4%, w ϩάΠϯɾϩάΞ΢τ΍τʔΫϯऔಘͳͲ w ؤுΕ͹.'"ʹ΋ରԠͰ͖Δ༷ࢠʢະ௅ઓʣ "NB[PO$PHOJUP*EFOUJUZ4%,

Slide 20

Slide 20 text

"84$PHOJUPར༻ࣄྫʢ͜Ε͸3JPU41"ʣ IUUQTHPHFUTIJGUFSJP

Slide 21

Slide 21 text

ηοτΞοϓ import {CognitoUserPool} from ‘amazon-cognito-identity-js’ const UserPool = new CognitoUserPool({ 'ClientId': ClientId, 'UserPoolId': UserPoolId }) w OQNJŠTBWFBNB[PODPHOJUPJEFOUJUZKT w JNQPSU΍SFRVJSFͰΑ΂Δ w $PHOJUPͷ*%৘ใΛΠϯελϯεʹ౉ͤ͹0,

Slide 22

Slide 22 text

Ϣʔβʔొ࿥αϯϓϧ IUUQTHJUIVCDPNBXTBNB[PODPHOJUPJEFOUJUZKTVTBHF UserPool.signUp( '[email protected]', 'password', [], null, function(err, result) { if (err) { alert(err) return } cognitoUser = result.user console.log('user name is ' + cognitoUser.getUsername()) })

Slide 23

Slide 23 text

DBMMCBDLͳͷͰɺ1SPNJTFͰϥοϓͨ͠ IUUQTHJUIVCDPNIJEFPLBNPUPSFBDUTFSWFSMFTTEBTICPBSECMPC NBTUFSDMJFOUIBOEMFSTBVUIKT-- return new Promise((resolve, reject) => { cognitoUser.authenticateUser(authenticationDetails, { 'onFailure': (err) => { reject(err) }, 'onSuccess': (result) => { const token = result.getAccessToken().getJwtToken() resolve(token) } }) })

Slide 24

Slide 24 text

DPNQPOFOU8JMM.PVOUͰձһϖʔδ͸ೝূ IUUQTHJUIVCDPNIJEFPLBNPUPSFBDUTFSWFSMFTTEBTICPBSECMPC NBTUFSDMJFOUSPVUFTQSJWBUF3PVUFKT-- Auth.getAuthStatus().then(result => { if (result === 'Unauthorized') { this.props.history.replace('/login') } else { const sessionId = result this.setState({sessionId}) } }) .catch((err) => { console.log(err) this.props.history.replace('/login') })

Slide 25

Slide 25 text

DPNQPOFOU8JMM.PVOUͰձһϖʔδ͸ೝূ IUUQTHJUIVCDPNIJEFPLBNPUPSFBDUTFSWFSMFTTEBTICPBSECMPC NBTUFSDMJFOUSPVUFTQSJWBUF3PVUFKT-- Auth.getAuthStatus().then(result => { if (result === 'Unauthorized') { this.props.history.replace('/login') } else { const sessionId = result this.setState({sessionId}) } }) .catch((err) => { console.log(err) this.props.history.replace('/login') }) N G ͳ Β h i s t o r y Ͱ Ϧ μΠ Ϩ Ϋ τ

Slide 26

Slide 26 text

ձһϖʔδ༻ͷ3PVUFλάΛ࡞ͬͯར༻ IUUQTHJUIVCDPNIJEFPLBNPUPSFBDUTFSWFSMFTTEBTICPBSECMPC NBTUFSDMJFOUMBZPVUTQSJWBUF-BZPVUKT-- {PrivateRoutes.map((route, index) => ( ))}

Slide 27

Slide 27 text

3FBDUͰͷαϯϓϧίʔυ΋͋Δ IUUQTHJUIVCDPNBXTBNB[PODPHOJUPJEFOUJUZKTUSFFNBTUFSFYBNQMFTCBCFMXFCQBDL

Slide 28

Slide 28 text

w ձһొ࿥ͷΈͰϩάΠϯͳͲ͸Ͱ͖ͳ͍ w ొ࿥ॲཧ݁Ռ͸DPOTPMFMPHͰग़Δ͚ͩ w σβΠϯ͸·ͬͨ͘͞Εͯͳ͍ w ෦඼औΓతͳཱͪҐஔʹͳΓͦ͏ 3FBDUͰͷαϯϓϧίʔυ΋͋Δ

Slide 29

Slide 29 text

IUUQTHJUIVCDPNBXTBNB[PO DPHOJUPJEFOUJUZKTUSFFNBTUFS FYBNQMFTCBCFMXFCQBDL ͘͢͝ૉͬؾͳ͍

Slide 30

Slide 30 text

w 3FBDU3PVUFSͷαϯϓϧίʔυ͸ཁΧελϜ w 1SPNJTF΍DBMMCBDLͷ݁ՌΛ࢖͑ͳ͔ͬͨ w ެ։ɾձһϖʔδͷ෼͚ํͳͲ͸ࢀߟʹͳΔ w ϝοηʔδ΍ϑΥʔϜ͸4FNBOUJD6*͞·͞· ࣮૷࣌ʹਏ͔ͬͨ఺

Slide 31

Slide 31 text

w 3FBDU3PVUFSWΈΜͳهࣄॻ͜͏ͥ w ."6·Ͱແྉ͔ͩΒ$PHOJUP͍͍Α w "1*(BUFXBZΛ͔ͭ͑͹ձһݶఆ"1*΋ͭ͘ΕΔ w ͜Ε͔Βຊ֨తʹϓϩδΣΫτಋೖ༧ఆ ͦͷ΄͔

Slide 32

Slide 32 text

IUUQTXQLZPUPOFUKBXTVHLZPUP TFSWFSMFTTDPHOJUPIBOETPO +"846(Ͱ ϋϯζΦϯ΍ͬͨ

Slide 33

Slide 33 text

αϯϓϧίʔυ IUUQTHJUIVCDPNIJEFPLBNPUPSFBDUTFSWFSMFTTEBTICPBSE

Slide 34

Slide 34 text

l z BOZRVFTUJPO