ddlogin for react
$ npm install ddlogin-react --save
import React from 'react' import DDlogin from 'ddlogin-react' export default class Login extends React.Component{ constructor(props){ super(props) this.state = { // 测试 appid APPID: 'dingoatk9pnaxugtzngq9l', // 跳转当前页面 REDIRECT_URI: window.location.href } } componentWillMount() { // 触发回调时处理回调链接,举例:如果查询字符串中含有state,且为dinglogin(可自行设置), // 则触发扫描登录的相应处理方法,比如登录。 const state = this.props.location && this.props.location.query.state; if(state === 'dinglogin') { const code = this.props.location.query.code; // todo.... // ex: dispatch(scanLogin({tmp_auth_code: code})); } } componentDidMount () { // 监听消息处理方法 const handleMessage = (event) => { // 获取loginTempCode const loginTempCode = event.data; // 获取消息来源 const origin = event.origin; // 拼接 url const url = `https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${this.state.APPID}&response_type=code&scope=snsapi_login&state=dinglogin&redirect_uri=${this.state.REDIRECT_URI}&loginTmpCode=${loginTempCode}` // 如果来源为https://login.dingtalk.com,则在当前窗口打开回调链接 if (origin === 'https://login.dingtalk.com') { window.open(encodeURI(url), '_parent') } }; // 监听iframe的消息 if (typeof window.addEventListener != 'undefined') { window.addEventListener('message', handleMessage, false); } else if (typeof window.attachEvent != 'undefined') { window.attachEvent('onmessage', handleMessage); } } render(){ const options = { id: "login-container", goto: `https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${this.state.APPID}&response_type=code&scope=snsapi_login&state=dinglogin&redirect_uri=${this.state.REDIRECT_URI}`, width: '350px', height: '350px' } return ( <div id="login"> <h2>扫描登录</h2> <DDlogin options={options}/> </div> ) } }
See more detail from Dingtalk Development Site
MIT License