我正在考虑在Rails中实现某种形式的匿名用户系统.我需要让人们做事(创建记录,查看他们创建的内容等),而无需实际创建帐户.一旦他们创建了一个帐户,一切都会持续存在,而不会因清除cookie或其他内容而丢失它.
现在,我认为这很简单.在User模型中有一个is_anonymous字段,并使用类似的东西来访问当前登录的用户:
def find_user
session[:user_id] ||= create_new_anonymous_user.id
end
Run Code Online (Sandbox Code Playgroud)
假设会话持续了一段合理的时间,并且会话cookie没有过期,那么应该保持一切顺利运行.
然而,有一部分我确信我错过了与安全相关的东西.以前有人做过这样的事吗?我错过了一些非常明显的东西吗?
谢谢!
我将如何为匿名用户缓存页面,但是为Django 1.6中的授权用户呈现这些页面?曾经有一个CACHE_MIDDLEWARE_ANONYMOUS_ONLY标志听起来很完美,但已被删除.
我问,因为每个页面都有一个菜单栏,显示登录用户的名字和他/她的个人资料的链接.
这样做的正确方法是什么?必须是一个常见的问题,但我没有找到正确的方式来浏览Django文档.
django caching django-templates django-cache anonymous-users
我的应用程序实现了一个购物车,匿名用户可以在其中填充产品.用户登录仅在付款前需要.如何实施?
主要的挑战是烧瓶必须跟踪用户(即使是匿名的)和他们的订单.我目前的方法是利用AnonymousUserMixin
分配给的对象current_user
.假设current_user
在整个会话期间不会改变.但是,我注意到,例如,每次浏览器页面刷新时都会AnonymousUserMixin
分配一个新对象current_user
.请注意,如果用户通过身份验证,则不会发生这种情况.
关于如何绕过这个的任何建议?
背景:在我的iOS游戏中,我想允许用户在不登录的情况下进行游戏(在Firebase中匿名进行身份验证以保存用户数据),还可以让他们选择使用Facebook登录以解锁其他游戏玩法.
我正在尝试修改此帖子,用匿名登录替换Twitter登录:
"users": {
"$userid": {
// Require the user to be logged in, and make sure their current credentials
// match at least one of the credentials listed below, unless we're creating
// a new account from scratch.
".write": "auth != null &&
(data.val() === null ||
(auth.provider === 'facebook' && auth.uid === data.child('facebook/id').val() ||
(auth.provider === 'anonymous' && auth.uid === data.child('anonymous/id').val()))"
}
}
Run Code Online (Sandbox Code Playgroud)
我很困惑转换将如何与这些规则一起使用.特别是说:
用户匿名进行身份验证,并且能够创建存储在其下的匿名uid的规范用户记录users/"$userid"/anonymous/id
.这是允许的,因为用户已通过身份验证并且第一次设置了用户对象(auth != null && data.val() === null
).
users/"$userid"/ …
我正在使用Spring Security 3.0.2,我找不到从数据库加载匿名用户角色的方法(我有动态角色,可以将角色分配给每个人).
我尝试使用自定义anonymousAuthenticationProvider,但从不调用此提供程序.这是我的配置:
<http auto-config="false">
<logout invalidate-session="true" logout-success-url="/page/welcome" />
<remember-me />
<anonymous username="_GUEST_" granted-authority="ROLE_GUEST" key="anonymousKey" />
<form-login login-page="/page/login" authentication-failure-url="/page/login?fail=1" default-target-url="/page/welcome" />
</http>
<authentication-manager alias="authenticationManager">
<authentication-provider ref="anonymousAuthenticationProvider"></authentication-provider>
<authentication-provider user-service-ref="accountDetails">
<password-encoder ref="passwordEncoder">
<salt-source user-property="xxxx" />
</password-encoder>
</authentication-provider>
</authentication-manager>
<beans:bean id="accountDetails" class="com.mysite.AccountDetailsImpl" />
<beans:bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.ShaPasswordEncoder">
<beans:constructor-arg value="512" />
</beans:bean>
<beans:bean id="anonymousAuthenticationProvider" class="com.my.site.security.CustomAnonymousAuthenticationProvider">
<beans:property name="key" value="anonymousKey" />
</beans:bean>
Run Code Online (Sandbox Code Playgroud)
永远不会调用我的anonymousAuthenticationProvider,因此我无法从数据库加载自定义权限.当我登录时,我的服务accountDetails被调用,我可以从数据库为用户加载角色,我想为匿名用户做同样的事情.
我该怎么做 ?谢谢
我试图跟踪AnonymousUsers以确定他们何时第一次来到网站,然后他们注册到网站.
为此,我创建了一个具有相关功能的中间件,但这最初假设每个AnonymousUsers已经有一个与之关联的会话(即sessionid cookie将在第一个响应中设置,相关会话已经在django_session中创建).注意:会话应用和中间件存在
看起来情况并非如此,在查看会话中间件时,当AnonymousUser首次出现在网站上时,会话永远不会被修改(用户会这样做,因为'_auth_user_id'和'_auth_user_backend'已设置),所以永远不会创建:
SessionMiddleware.process_response
def process_response(self, request, response):
"""
If request.session was modified, or if the configuration is to save the
session every time, save the changes and set a session cookie.
"""
try:
accessed = request.session.accessed
modified = request.session.modified
except AttributeError:
pass
else:
if accessed:
patch_vary_headers(response, ('Cookie',))
if modified or settings.SESSION_SAVE_EVERY_REQUEST:
if request.session.get_expire_at_browser_close():
max_age = None
expires = None
else:
max_age = request.session.get_expiry_age()
expires_time = time.time() + max_age
expires = cookie_date(expires_time)
# Save the session data and …
Run Code Online (Sandbox Code Playgroud) 我已在SharePoint网站上为"列表和库"配置了匿名访问.然后,我根据我的要求启用对单个列表/库的匿名访问.
这很好用,但我无法访问我希望被重定向到欢迎页面的根网站URL:
如果我将Web权限设置为"整个网站",我可以访问根URL,但我不想这样做.
我正在为我的网站配置网站定义,并在功能激活期间通过对象模型修改网站,例如
web.AnonymousPermMask64 = SPBasePermissions.Open;
web.AnonymousState = SPWeb.WebAnonymousState.Enabled;
web.Update();
Run Code Online (Sandbox Code Playgroud)
...这是我已经成功使用的代码.
有谁知道如何允许匿名访问http:// servername?
我的django应用程序中有一个简单的Post模型:
class Post(models.Model):
category = models.CharField(max_length=10, choices=choices)
message = models.CharField(max_length=500)
user = models.ForeignKey(User, editable=False)
Run Code Online (Sandbox Code Playgroud)
我想实现让匿名用户创建带昵称的帖子的功能.不幸的是,django不允许您将AnonymousUser的实例保存为Post类的外键.
我想在db中添加一个"虚拟"用户记录,代表匿名用户(id = 0,或者如果可能的话,还有一些负数),用于没有用户的所有帖子.如果存在,则可以使用可以为空的名称字段来表示匿名用户的昵称.
这个解决方案对我来说似乎有些苛刻.有没有更清洁更有效的解决方案?
我有以下基于 Firebase 后端的移动应用场景:
Firebase 匿名身份验证似乎非常适合这种情况 - 但文档暗示它只能用作临时解决方案,直到用户创建实际帐户。使用匿名身份验证作为解决方案的唯一身份验证方法有什么缺点吗?我看到的替代方案是使用基于自定义令牌的登录或电子邮件/密码身份验证的某种黑客攻击。
anonymous-users firebase google-cloud-platform firebase-authentication
django ×3
firebase ×2
security ×2
anonymous ×1
caching ×1
database ×1
django-cache ×1
facebook ×1
flask ×1
flask-login ×1
moss ×1
python ×1
ruby ×1
session ×1
sharepoint ×1