我一直在搜索net,试图找到任何定义如何在流星和响应路由器4中处理身份验证的地方。
基本上,我希望某些路由只对经过身份验证的用户可用。有相关文件吗?
阿西尔
我一直在尝试使用功能组件来获得一种更为更新的方法。我尝试过实现一个与React router的文档类似的条件检查。这在给出history.push至所需路线后起作用,等待Meteor.loginWithPassword
完成。但刷新浏览器最终再次呈现登录页面。
流星具有中间状态Meteor.loggingIn()
。在身份验证检查中处理此状态可修复此问题。
请随意给予反馈。
我在Meteor-React路由器堆栈中创建了一个路由认证实现的要点,其中包含功能组件和挂钩。
将这一要点与实施的基本结构核对一下。https://gist.github.com/rinturj84/0ef61005bf3a4ca5fb665dfc5f77e3d1
以下是一种获得公共路线和认证路线的简洁方法:https://gist.github.com/lucnat/643988451c783a8428a2811dbea3d168
PublicLayout
身份验证布局
我们可以有任意数量的布局。在上面的例子中,有两个布局--每个布局都有自己的导航栏。
流星有一个非常发达的用户帐户系统。它为使用Twitter、Facebook等进行OAuth身份验证提供了现成的库,以及基本但有用的UI包。先在这里查看流星的官方指南。
为了实现路由,您需要跟踪Meteor.userId(),并通过Meteor的反应式系统Tracker更改路由Meteor.userId()
如果当前连接的用户已登录,则返回用户ID,否则返回null。下面,我提供了一个React路由器用于路由的示例代码。请注意,在使用React Router v4时,还需要安装和导入历史记录
包。
在client/main.js中;
import { Meteor } from 'meteor/meteor';
import React from 'react';
import ReactDOM from 'react-dom';
import { Tracker } from 'meteor/tracker'
import {onAuthChange, routes} from "../imports/routes/routes";
Tracker.autorun(function(){
const authenticated = !! Meteor.userId();
onAuthChange(authenticated);
});
Meteor.startup(() => {
ReactDOM.render(routes, document.getElementById('app'));
});
在routes.js文件中;
import { Meteor } from 'meteor/meteor';
import React from 'react';
import { Router, Route, Switch } from 'react-router-dom';
import createBrowserHistory from 'history/createBrowserHistory'
import Home from './../ui/components/Home';
import Login from './../ui/components/Login';
import NotFound from './../ui/components/NotFound';
import Signup from './../ui/components/Signup';
const history = createBrowserHistory();
const unauthenticatedPages = ['/', '/signup'];
const authenticatedPages = ['/link'];
const publicPage = function () {
if (Meteor.userId()) {
history.replace('/link');
}
};
const privatePage = function () {
if(! Meteor.userId()) {
history.replace('/');
}
};
export const routes = (
<Router history = {history}>
<Switch>
<Route exact path='/:id' component= {Login} onEnter={publicPage}/>
<Route exact path='/signup' component={Signup} onEnter={publicPage}/>
<Route exact path='/link' render={ () => <Home greet='User'/> } onEnter={privatePage} />
<Route component={NotFound}/>
</Switch>
</Router>
);
export const onAuthChange = function (authenticated) {
console.log("isAuthenticated: ", authenticated);
const path = history.location.pathname;
const isUnauthenticatedPage = unauthenticatedPages.includes(path);
const isAuthenticatedPage = authenticatedPages.includes(path);
if (authenticated && isUnauthenticatedPage) { // pages: /signup and /
console.log(`Authenticated user routed to the path /link`);
history.replace('/link');
} else if (!authenticated && isAuthenticatedPage) {
console.log(`Unauthenticated user routed to the path /`);
history.replace('/');
}
};
我试图实现身份验证的路由,但发现React路由器4现在阻止此工作: 错误是: 警告:您不应使用
我正在用React和Spring Boot构建一个完整的堆栈应用程序,但是遇到了一个问题,我在任何地方都没有找到答案。 我试图实现的行为如下: > 如果用户想要访问登录或注册页面,我想要重定向用户到主页,如果他们被认证。在redux中,我在应用程序首次加载时设置了一个标志。 我还想重定向用户到登录页面,如果他们没有经过身份验证,并试图访问主页。 第一个目标工作正常,因为有很多教程解释如何使用反应路
试图使某些路由需要身份验证。 我有这个: 注意:是的,身份验证服务正常工作。 对于每个路由,我检查用户是否经过身份验证,如果没有,那么我想将他们重定向到登录页面,如果他们是,那么它将在第一个页面上着陆,路由为"/"。 我得到的只是: 我哪里做错了?
问题内容: 我试图实现经过身份验证的路由,但是发现React Router 4现在阻止了它的工作: 错误是: 警告:您不应使用和在同一路线上;将被忽略 在这种情况下,实现此目标的正确方法是什么? 它出现在(v4)文档中,提示类似 但是在将一堆路线组合在一起时是否有可能实现这一目标? 更新 好吧,经过一番研究,我想到了这个: 发出错误的动作是正确的感觉。似乎确实不正确,还是带有其他挂钩? 问题答案:
问题内容: 我是AngularJS的新手,在以下情况下我对如何使用angular-“ ui-router”感到有些困惑: 我正在构建一个包含两个部分的Web应用程序。第一部分是带有登录和注册视图的主页,第二部分是仪表板(成功登录后)。 我为home部分创建了一个带有角度应用程序和配置的,用于处理和查看,还有一个针对仪表板部分的文件,其应用程序和配置用于处理许多子视图。 现在,我完成了仪表板部分,并
问题内容: 我正在尝试为我的支票写支票。但是该函数本身并未被调用。有人可以给我一些解决方案吗?我正在用ReactJs开发。 这是路线部分: 这是功能: 问题答案: 在,你可以利用来与生命周期方法一起更换功能存在于反应路由器V3。 查看此答案以获取更多详细信息: react-router v4中的onEnter prop 但是,由于您要做的只是在onEnter道具中进行身份验证,因此您可以轻松创建一