๋ชจ๋ธ ๋ ์ด์ด ํจ๊ณผ์์ ์๋น์ค ๋ ์ด์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
// ๅผๅ
ฅservice
import { login } from '../services/authentication';
// effects
*login({ payload: { currentUser } }, { select, call, put }) {
const data = yield call(login, {
"mobile": currentUser.userName,
"password": currentUser.password
});
console.log('my response data is:', data);
๋ธ๋ผ์ฐ์ ๋ณด๊ธฐ ์๋ฒ ์์ฒญ์ ์ ์์ด์ง๋ง ์ธ์ ๋ฐ์ดํฐ๋ checkstatus์ ์ํด ์์ฑ ๋ ์ค๋ฅ๋ฅผ ํ์ํ๋ฉฐ checkstatus ์ด์ ์ ๋ฆฌํด ๋ ์๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
body:(...)
bodyUsed:false
headers:Headers
__proto__: Headers
ok:false
status:0
statusText:""
type:"opaque"
url:""
์ค๋กํฉ๋๋ค, ๋ฌด์์ด ๋ฌธ์ ์ผ๊น์? ๋ธ๋ผ์ฐ์ ๋ณด๊ธฐ ์์ฒญ์ 200์ ์ํ๋ฅผ ๋ฐํํ์ง๋ง ์ฌ๊ธฐ์์ ์ป์ http ์ํ ์ฝ๋๋ 0์ ๋๋ค. ๋ด ํจ๊ณผ ๋๋ ๊ฐ์ ธ ์ค๊ธฐ์ ๋๊น?
277 ๊ทธ๋ฐ๋ฐ ํค๋๋ฅผ ์ถ๊ฐํ๋ ๋ฌธ์ ๋ ์ฌ์ ํ ์กด์ฌํ๋ฉฐ dva6.0 ๋ฒ์ ์ด๊ธฐ๋ํฉ๋๋ค. ๋ํ ๊ฐ์ ธ ์ค๊ธฐ์ ๋ฌธ์ ์ผ๊น์?
ํจ๊ณผ ๋ฌธ์ ๊ฐ ์๋๋ผ ๊ฐ์ ธ ์ค๊ธฐ์ ๊ด๋ จ์ด ์์ด์ผํฉ๋๋ค. ๊ต์ฐจ ๋๋ฉ์ธ?
๊ต์ฐจ ๋๋ฉ์ธ ์์ฒญ์ํ๊ณ ์์ฒญ์ ๋ง๋ค๊ธฐ ์ํด axios๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ ์์ ๋๋ค. ๊ต์ฐจ ๋๋ฉ์ธ์ ์ง์ํ๋ ค๋ฉด ๊ฐ์ ธ ์ค๊ธฐ์ ์ด๋ค ๋งค๊ฐ ๋ณ์๋ฅผ ๊ตฌ์ฑํด์ผํฉ๋๊น?
๊ตฌ์ฒด์ ์ผ๋ก ์๋ํ์ง๋ ์์์ง๋ง ๊ฐ์ ธ ์ค๊ธฐ ๋ฌธ์๋ฅผ ๋ณด๋ฉด ๋๋ฉ์ธ ๊ฐ ์ฒ๋ฆฌ๊ฐ XMLHTTPRequest์ ์ผ์นํ๋ค๊ณ ํฉ๋๋ค. ์ฟ ํค๋ฅผ ๊ฐ์ ธ ์ค์ง ์์๋ค๋ ์ฌ์ค๊ณผ ๊ด๋ จ์ด ์์๊น์? https://www.npmjs.com/package/whatwg-fetch#sending -cookies
๋ด ํ๋ก์ ํธ์์ ์๋ฒ๋ GO ์ธ์ด๋ก ์์ฑ๋์์ผ๋ฉฐ ์๋ฒ๊ฐ ๋๋ฉ์ธ ๊ฐ ์ง์ / ํ์ฉ์ผ๋ก ๊ตฌ์ฑ๋์ด์๋ ํ ํด๋ผ์ด์ธํธ๋ฅผ ๊ฐ์ ธ ์ค๋ ๋ฐ ์ถ๊ฐ ๊ตฌ์ฑ์ด ํ์ํ์ง ์์ต๋๋ค.
@xaviertung ์ ๋ฌธ์ ๋ฅผ ๋ถ์ / ์ฐพ๊ธฐ ์ํด ์๋ฒ ๋ก๊ทธ๋ฅผ ํ์ธํ๋ ๊ฒ์ ๊ณ ๋ คํ ์
2016 ๋ 11 ์ 18 ์ผ ์ค์ 8์ 30 ๋ถ์ chencheng (ไบ ่ฐฆ) [email protected] ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๊ตฌ์ฒด์ ์ผ๋ก ์๋ํ์ง๋ ์์์ง๋ง ๊ฐ์ ธ ์ค๊ธฐ ๋ฌธ์๋ฅผ ๋ณด๋ฉด ๋๋ฉ์ธ ๊ฐ ์ฒ๋ฆฌ๊ฐ XMLHTTPRequest์ ์ผ์นํ๋ค๊ณ ํฉ๋๋ค. ์ฟ ํค๋ฅผ ๊ฐ์ ธ ์ค์ง ์์๋ค๋ ์ฌ์ค๊ณผ ๊ด๋ จ์ด ์์๊น์? https://www.npmjs.com/package/whatwg-fetch#sending -cookies https://www.npmjs.com/package/whatwg-fetch#sending -cookies
โ
์ด ์ค๋ ๋๋ฅผ ๊ตฌ๋ ํ๊ธฐ ๋๋ฌธ์์ด ๋ฉ์์ง๊ฐ ์ ์ก๋์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub https://github.com/dvajs/dva/issues/282#issuecomment -261413729์์ ํ์ธํ๊ฑฐ๋ https://github.com/notifications/unsubscribe-auth/ACv7UniRkGq0Uv8XFBUeNMe5jBeGyWpQks5q_PKgaJpQks5q_PKgaJpQks5q_PKgaJpQks5q 4
๊ฐ์ฌํฉ๋๋ค. ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค. ๋ชจ๋ ๋ฐ ์๊ฒฉ ์ฆ๋ช ์ค์ ์ ๋ฌธ์ ์ ๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ, ๊ณํ์ ๋ํด ์๊ธฐํด ๋ณผ๊น์? ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋์ค์ ๋ง๋ ์ ์์ต๋๋ค.
@sorrycc ์ ์๋, ๊ต์ฐจ ๋๋ฉ์ธ ๊ฐ์ ธ ์ค๊ธฐ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ฐ์ ธ ์ค๊ธฐ ์์ฒญ์ ์ฌ์ฉํ ํ ์ฝ์์ 200 ์ต์ ์์ฒญ์ด ๋ํ๋ฌ์ต๋๋ค. ๋ฐฐ๊ฒฝ์ ์ค๋จ ์ ์ ์ ๋ ฅ ํ ์ ์์ต๋๋ค. ํ๋จ ๋ฐฉ๋ฒ์ GET (๋ด ์ค์ ์์ฒญ)์ด๊ณ ํ๋ก ํธ ์๋๋ response.json ()์ ์ฌ์ฉํฉ๋๋ค. ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฐ์ดํฐ๋ ๊ฐ์ ธ์ฌ ์ ์์ง๋ง ์ฝ์์๋ GET ์์ฒญ ๊ธฐ๋ก์ด์๊ณ ์ต์ ๋ง ์์ต๋๋ค. ajax๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ์์ ๋๋ค. ์ฝ์์๋ ์ต์ ๋ฐ GET ์์ฒญ์ด ๋ชจ๋ ์์ต๋๋ค.
@AsceticBoy ๋ ์ฝ์์ ๋ฌธ์ ๊ฐ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ํํฐ๋ง ๊ธฐ๋ฅ์ด ์์ต๋๊น?
@xaviertung ๊ต์ฐจ ์ฌ์ดํธ ํ๋ฐํธ ์๋๋ ๋ชจ๋๋ฅผ ์ค์ ํ๊ธฐ
ํค๋์ ์๊ฒฉ ์ฆ๋ช
: 'include'๋ฅผ ์ถ๊ฐํ์ผ๋ฉฐ ์์ฒญ์ด ํ์ฉ๋์ง ์๋๋ค๋ ์ค๋ฅ๋ฅผ๋ณด๊ณ ํฉ๋๋ค.
์ง๊ธ์ ๋๋ฒ๊น
์ด ๋ฒ๊ฑฐ๋กญ๊ณ ๋งค๋ฒ ๋น์ฉ ๋๋ฉ์ธ์ ๋ณ๊ฒฝ ํ ๋ค์ ํ๋ฐํธ ์๋๋ฅผ ์ปดํ์ผํ๊ณ ๋๋ฒ๊น
์ ์ํด ๋ฐฑ ์๋ ํ๋ก์ ํธ์ ๋ฃ์ด์ผํฉ๋๋ค.
๋ด๊ฐ ์ฌ์ฉํ๋ nginx + tomcat (๋ด) ๋ฐฑ์๋๋ฅผ ์ค์ ํ๋ ค๋ฉด ์ด๋ป๊ฒํด์ผํฉ๋๊น?๊ฐ์ฌํฉ๋๋ค
@wuyongdec ์ ๋๋ฉ์ธ ๊ฐ ๊ตฌ์ฑ์ ํ์ฉํ๊ธฐ ์ํด ์๋ฒ๊ฐ ์ด๋ ค ์๋์ง ํ์ธํด์ผํฉ๋๋ค.
@wuyongdec dora๋ ๋๋ฉ์ธ ๊ฐ ๋๋ฒ๊น ์ ์ง์ํฉ๋๋ค.
@xaviertung ์๋ฒ๊ฐ ์ด๋ ธ์ง๋ง ์๊ฒฉ ์ฆ๋ช : 'include'๊ฐ ์ถ๊ฐ๋์์ ๋ ์๋ฒ๊ฐ ๊ฑฐ๋ถ๋์์ต๋๋ค.
@jingchenxu ๋ฌธ์๊ฐ ์์ต๋๊น?
.roadhogrc์์ ํ๋ก์๊ฐ ๊ตฌ์ฑ๋์ง ์์๊ธฐ ๋๋ฌธ์์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ํ๋กฌํํธ๋ ๋๋ฉ์ธ ๊ฐ ๋ฌธ์ ์ด๊ธฐ๋ํฉ๋๋ค.
๋์์ http://jsonplaceholder.typicode.com/ ์ ์์ ์ ์๋ฒ ์ฃผ์๋ก ๋ณ๊ฒฝํ์ญ์์ค.
"proxy": {
"/api": {
"target": "http://jsonplaceholder.typicode.com/",
"changeOrigin": true,
"pathRewrite": { "^/api" : "" }
}
}
@wuyongdec ๋๋ ๋น์ ๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ํด๊ฒฐ ํ์ต๋๊น? ์ด๋ป๊ฒ ํด๊ฒฐ ๋์์ต๋๊น?
๋๋ฉ์ธ ๊ฐ ๊ตฌ์ฑ์ ์ํด ํ๋ฐํธ ์๋์ ๋ฐฑ ์๋๋ฅผ ๋ถ๋ฆฌํ์ญ์์ค! ! ! ๋น ์ฟ ํค ์ธ์ฆ, JWT ์ธ์ฆ ๊ตฌ์ฑ! !
๋๋ฉ์ธ ๊ฐ ์์ฒญ์ ๋ํ ๋ฌด๋ฅ๋ ฅ์ ํด๊ฒฐํ๊ณ ,
๋จผ์ config.js์ ํ๋ก์๋ฅผ ์ค์ ํ์ง ๋ง์ญ์์ค.์ด ๊ตฌ์ฑ์ ๋ก์ปฌ ๊ฐ๋ฐ์๋ง ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋น๋ ํ์๋ ์ ํจํ์ง ์์ต๋๋ค.
๋ด ๊ณํ:
.env์์ ๊ตฌ์ฑ (์๋๋ผ๋ฉด ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ์์ฑ)
API๋ฅผ ์์ฒญํ ๋ ์๋ฒ ์ฃผ์๋ฅผ ์ฝ์ผ์ญ์์ค. (request.js ์์ )
nghin / apache / php ์๋ฒ ํ๋ฌ์ค
add_header Access-Control-Allow-Origin * always; ### (Nginx 1.7.5 ์ดํ)
add_header Access-Control-Allow-Methods GET, POST, OPTIONS, HEAD, PUT;
add_header Access-Control-Allow-Headers "Authorization, Content-Type";
ํ๋ฐํธ ์๋ ํ์น :
credentials : 'omit'// ์ด๊ฒ์ ์ฟ ํค๊ฐ ์ ์ก๋์ง ์์ผ๋ฉฐ ๊ต์ฐจ ๋๋ฉ์ธ ์์ฒญ์ด ํ์ํจ์ ์๋ฏธํฉ๋๋ค.
๋จธ๋ฆฌ๊ธ:{
์ธ์ฆ : localStorage.getItem ( 'login-token'),
}
์ด ์ค "๊ถํ ๋ถ์ฌ"๋ ์๋ฒ ์ธก ์ธ์ฆ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ์๋ฒ์ ๋ค๋ฅธ ๊ตฌ์ฑ์ ์๋ฏธํฉ๋๋ค.
๋ด๊ฐ ์ฌ๊ธฐ์ ํ ์ผ์ ๊ธฐ๋กํ์ญ์์ค.
๋๋ฉ์ธ ์ด๋ฆ์ด ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ ๋ฐฑ์๋๊ฐ ๊ต์ฐจ ๋๋ฉ์ธ์ ์ง์ํ๋์ง ํ์ธํ์ญ์์ค.
200400500์ ๊ด๊ณ์์ด Access-Control-Allow-Origin ๋ฐ ๊ธฐํ ์ ๋ณด๋ฅผ ์ ๋ฌํด์ผํฉ๋๋ค.
๋ค์ ๋ ๋งค๊ฐ ๋ณ์๋ ๊ฐ์ ธ ์ค๊ธฐ ํค๋์์ ์ ๋ฌ๋ฉ๋๋ค.
{
mode: 'cors',
credentials: 'include',
}
nginx ์๋ฒ๋ ๋ค์ ํค๋๋ฅผ ์์ฑํฉ๋๋ค.
add_header Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Keep-Alive,User-Agent,Cache-Control,Content-Type,Authorization,sbid
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Origin: ไฝ ็ๅๅ
ํ์ฌ ๊ฒ์๋ฌผ ์ญ์ ๋ฑ์ ๋ชจ๋ ์ ์์ ์ผ๋ก ์๋ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด nginx๋ 401์ ๋ฐํ ํ ๋ Access-Control-Allow-Origin ๋ฐ ๊ธฐํ ์ ๋ณด๋ฅผ ์์คํ์ฌ 401 (https://github.com/github/fetch/issues/201)์์ ์๋ต ์ํ๋ฅผ ๊ฐ์ ธ ์ค์ง ๋ชปํ์ต๋๋ค. # issuecomment-141777867)
์๋ฃจ์
, nginx๋ ํญ์ ์ถ๊ฐ
๊ตฌ๋ฌธ : | add_header ์ด๋ฆ ๊ฐ [ํญ์];
http, ์๋ฒ, ์์น (์์น์์๋ ๊ฒฝ์ฐ)
server {
listen 80;
server_name www.google.com;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin 'http://www.baidu.com' always;
add_header Access-Control-Allow-Credentials 'true' always;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS' always;
add_header Access-Control-Allow-Headers 'Keep-Alive,User-Agent,Cache-Control,Content-Type,Authorization,sbid' always;
return 200;
}
root /home/wwwroot/php;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
add_header Access-Control-Allow-Origin 'http://www.baidu.com' always;
add_header Access-Control-Allow-Credentials 'true' always;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS' always;
add_header Access-Control-Allow-Headers 'Keep-Alive,User-Agent,Cache-Control,Content-Type,Authorization,sbid' always;
root /home/wwwroot/php/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
server {
listen 80;
server_name www.baidu.com;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /home/wwwroot/view;
try_files $uri $uri/ /index.html;
}
}
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
2. ์ธํฐ๋ท์์ ๋๋ฉ์ธ ๊ฐ ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ์์๋ ๊ฒ์๋ฌผ์ ์ฐพ์๊ณ , ๋ชจ๋๋ฅผ no-cors๋ก ์ค์ ํ๊ณ ์ฐํํ์ต๋๋ค.
3. ๋ง์ง๋ง์ผ๋ก fetch์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฝ๊ณ fetch์ ๋ํด ๋ ๊น์ด ์ดํดํ๊ณ , ๋ง์ง๋ง์ผ๋ก ๋ชจ๋ cors๋ฅผ ์ค์ ํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
์์ฝ : ๋๋ฉ์ธ ๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ํ ํต์ฌ์ xhr ๋ฐ http ํ๋กํ ์ฝ์ ์ดํดํ๋ ๋ฐ ์์ต๋๋ค. ๋ชจ๋๋ฅผ Cors ๋ฐ no-cors๋ก ์ง์ ํ๋ ๊ฒ์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ cors๊ฐ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์ ์ต์ s๋ฅผ ํต๊ณผํ๋ค๋ ๊ฒ์ ๋๋ค. ์์ญ.