2017-09-08 163 views
0

这是我迄今为止所使用的,我使用REDX来维护全局登录状态。在我的登录画面,我用行动创造者像这样记录用户...如何检查用户是否登录了,使用firebase进行反应原生?

// In LoginScreen file 
    onLogin =() => { 
     this.props.accountLogin({ email, password }); 
    } 

而且在操作文件,accountLogin被定义为:

// In auth_action file 
    export const accountLogin = ({ email, password }) => { 
     firebase.auth().signInWithEmailAndPassword(email, password) 
     .then(user => { 
      dispatch({ type: LOGIN_SUCCESS, payload: user })}); 
     }); 
    }; 

然后,在减速的文件,情况LOGIN_SUCCESS是像这样处理......

// In auth_reducer file 
    const INITIAL_STATE = { 
     // ... Other stuff 
     user: null 
    }; 
    export default function (state = INITIAL_STATE, action) { 
     // ... Other cases 
     // Login Successful case 
     case LOGIN_SUCCESS: 
     return { ...state, user: action.payload }; 
     // After this return statement, I now have user's profile info 
    }; 

所以我的问题是,我该如何持续存在,因此下一次用户打开应用程序用户的个人资料信息,他们不必重新登录?我做了一些研究,这是我有:

// Use autoRehydrate and persistStore in 'redux-persist' 
    // In store file 
    import { createStore, compose, applyMiddleware } from 'redux'; 
    import thunk from 'redux-thunk'; 
    import { autoRehydrate, persistStore } from 'redux-persist'; 
    import { AsyncStorage } from 'react-native'; 
    import reducers from '../reducers'; 

    const store = createStore(
     reducers, 
     {}, 
     compose(
     applyMiddleware(thunk), 
     autoRehydrate() 
    ) 
    ); 

    persistStore(store, { storage: AsyncStorage, whitelist: ['auth'] }); 

    export default store; 

和当然,我没有处理我的auth_reducer文件REHYDRATE情况。但是,仍然的确,在用户重新打开应用程序后,我从上次用户使用该应用程序获取用户信息,如何使用这一信息继续修改Firebase数据库中的数据?

例如,如果用户重新打开该应用并希望更改他的名字,firebase如何知道这是授权用户?如何写这个changeName函数?

回答

2

这种方法可以帮助你。设置这在您的componentWillMount

firebase.auth().onAuthStateChanged((user) => { 
     if (user) { 
     console.log('user logged') 
     } 
    }); 

此处了解详情:https://firebase.google.com/docs/auth/

+0

谢谢@soutot,就是像一个监听器?所以,每当我退出应用程序,auth状态会改变?那么当我重新打开应用程序时会发生什么?自动登录我? –

+1

是的,Firebase在本地存储auth用户。除了注销,卸载或清理应用程序数据外,每当您打开应用程序时,它都会将您识别为auth用户。 – soutot

+0

非常感谢。最后一个问题是:当我进入用户的主页时,用户名将显示在标题中,这意味着我必须在'componentWillMount()'方法中获取用户的信息,我是否需要调用'const {currentUser} = firebase.auth()'获取当前登录用户的信息?如果是这样,那么我不需要使用redux-persist来持久保存用户的数据? –

相关问题