ServiceStack OAuth - 注册而不是登录

2024-04-14

在 servicestack OAuth 实现中,我只看到了自动登录的可能性,例如。脸书账号。

但是否能够支持通过 Facebook 登录进行注册过程。我想要的是让用户登录到 facebook 应用程序,然后加载他们的姓名、姓氏和电子邮件,并预先填写所需的文本框以便在我的网站上进行真实注册(因为我还必须进行手机验证等)我不希望用户使用 facebook 登录时要获得授权和身份验证。只有凭据登录才应该是有效的完整站点访问权限。

Edit:我找到了解决方案。

在 FacebookProvider.cs 中

public override bool IsAuthorized(IAuthSession session, IOAuthTokens tokens, Auth request = null)
{
    if (request != null)
    {
        if (!LoginMatchesSession(session, request.UserName)) return false;
    }
    return tokens != null && session.UserName!=null && !string.IsNullOrEmpty(tokens.AccessTokenSecret);
}

问题是&& session.UserName!=null部分。因此我们可以检查用户是否使用凭据登录,这将为 !=null 并且用户可以使用所有服务。如果不是,这将是 ==null 并且他只能从会话中获取 facebook 信息。


The 社交引导 API http://bootstrapapi.apphb.com项目显示了一个通过覆盖成功身份验证后处理回调的示例其自定义用户会话的 OnAuthenticated() 挂钩 https://github.com/ServiceStack/SocialBootstrapApi/blob/master/src/SocialBootstrapApi/Models/CustomUserSession.cs:

我删除、重写了一些内容并强调了一些重要的部分:

public class CustomUserSession : AuthUserSession
{
    public override void OnAuthenticated(IServiceBase authService, 
                    IAuthSession session, 
                    IOAuthTokens tokens, 
                    Dictionary<string, string> authInfo)
    {
        base.OnAuthenticated(authService, session, tokens, authInfo);

        //Populate matching fields from this session into your own MyUserTable
        var user = session.TranslateTo<MyUserTable>();
        user.Id = int.Parse(session.UserAuthId);
        user.GravatarImageUrl64 = CreateGravatarUrl(session.Email, 64);

        foreach (var authToken in session.ProviderOAuthAccess)
        {
            if (authToken.Provider == FacebookAuthProvider.Name)
            {
                user.FacebookName = authToken.DisplayName;
                user.FacebookFirstName = authToken.FirstName;
                user.FacebookLastName = authToken.LastName;
                user.FacebookEmail = authToken.Email;
            }
            else if (authToken.Provider == TwitterAuthProvider.Name)
            {
                user.TwitterName = authToken.DisplayName;
            }
        }

        //Resolve the DbFactory from the IOC and persist the user info
        using (var db = authService.TryResolve<IDbConnectionFactory>().Open())
        {
            //Update (if exists) or insert populated data into 'MyUserTable'
            db.Save(user);
        }

    }

    //Change `IsAuthorized` to only verify users authenticated with Credentials
    public override bool IsAuthorized(string provider)
    {
        if (provider != AuthService.CredentialsProvider) return false;
        return base.IsAuthorized(provider);
    }
}

基本上,这个用户定义的自定义逻辑(每次成功的身份验证后都会触发)从 UserSession 中提取数据并将其存储在自定义的“MyUserTable”中。

我们还重写了IsAuthorized仅接受已使用 CredentialsAuth 进行身份验证的用户。

您可以使用此数据来完成其余的注册。

其他可能的定制

ServiceStack 的内置 Auth 会保留 AuthData 并自动为您填充会话。如果您想添加额外的验证断言,您可以简单地使用您自己的自定义 [Authentication] 属性,而不是包含其他自定义逻辑。看一下内置的实现验证属性作为指导 https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.ServiceInterface/AuthenticateAttribute.cs.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ServiceStack OAuth - 注册而不是登录 的相关文章

  • 在 Java 服务器中验证 Windows 用户

    我正在开发一个用 Java 编写的服务器和一个在同一网络上的 Windows 计算机上运行的客户端 用 Net 编写的桌面应用程序 我希望进行一些基本身份验证 以便服务器可以确定运行客户端的用户的用户名 而不需要用户在客户端中重新输入其 W
  • 通过服务删除 Windows 登录屏幕

    我正在尝试从服务启动的可执行文件中删除 Windows 登录屏幕 winlogon 该服务将随 Windows 自动启动 并等待来自另一台计算机的命令 当它收到命令时 它将启动一个 exe 该 exe 将在特定用户名下启动 cmd exe
  • 在浏览器上验证 JWT

    我一直在读关于JWT https jwt io 我知道它分为三个部分 即header payload and signature 我将哈希算法保留在标头中 将基本信息保留在有效负载中例如 姓名 年龄 职务 有效期等在有效负载中 然后这两个都
  • 将 gsutil 与谷歌驱动器(不是谷歌云存储)一起使用

    gsutil https cloud google com storage docs gsutil csw 1 gettingstarted use 博托配置文件 https cloud google com storage docs gs
  • 内部注册 vs. OpenID vs. Google Friend Connect vs. Facebook Connect vs.(等等)

    我正在尝试决定如何允许用户注册我的网站 有 openID clickpass facebook connect googlefriendconnect 等 或者是老式的内部 输入用户名 电子邮件 密码等 简要地看一下如何设置 OpenID
  • 执行oauth时如何创建弹出窗口?

    我想通过使用弹出窗口来完成 Lifestream 和其他网站使用 oauth 身份验证所做的事情 他们打开一个弹出窗口 不知何故没有被弹出窗口拦截器阻止 并将他们的网站变灰 然后 在允许 oauth 访问时 它会说重定向回原始站点并终止弹出
  • 我可以使用 Facebook Graph API 将照片上传到属于粉丝(公司)页面墙的墙吗?

    我需要知道是否可以使用图形 API 将照片上传到公司的粉丝页面 到墙上 另外 一旦用户获得授权 是否可以通过 api 成为公司页面 成为粉丝 是的你可以 您需要使用 Graph API 浏览器 https developers facebo
  • nginx代理认证拦截

    我有几个服务 它们支持 nginx 实例 为了处理身份验证 在 nginx 中 我拦截每个请求并将其发送到身份验证服务 在那里 如果凭据正确 我将设置一个包含用户相关信息的 cookie 现在 请求应该被路由到适当的服务 并设置 cooki
  • Facebook Javascript SDK - 查询个人资料图片

    我正在尝试通过 Javascript SDK 查询个人资料图片 I do 不想要图表 api 链接 我想得到src big link 我有以下代码 FB api me fields id name picture function resp
  • 使用 Graph API 删除 facebook 帖子 - 无法正常工作

    我使用以下命令在我的 Facebook 页面上发布消息 attachment array access token gt access token message gt This is a test Message 4 name gt Th
  • Facebook“喜欢”按钮,喜欢另一个页面/URL

    我有一个链接列表 每个单独的页面上都有一个 喜欢 按钮来 喜欢 该页面 但我想要列表中每个链接旁边有一个 喜欢 按钮 该按钮会喜欢旁边链接的 URL 就像单击链接然后单击 喜欢 按钮一样 我该怎么做呢 要在每个单独的页面上创建按钮 我使用以
  • 我可以通过 PresentFeedDialogModallyWithSession 传递给 FBWebDialogs 的完整合法参数集是什么

    我查看了 Facebook 上的示例代码 这里 https developers facebook com docs howtos feed dialog using ios sdk https developers facebook co
  • WPF 和 WCF 应用程序的用户身份验证/授权的“最佳实践”是什么?

    假设我有一个 NET 富客户端 WPF 应用程序 它将同时部署在 3 个不同的场景中 客户端和服务器代码在单个进程中运行 客户端代码在 Intranet 计算机上运行 并通过 WCF 与运行应用程序 域 基础设施代码的服务器计算机进行通信
  • Facebook iOS 选择好友表空白

    我正在尝试将 选择的朋友 添加到我的 iOS 应用程序中 我设置了登录视图 登录后 我打开朋友选择器 但它显示为空白 我看到带有 完成 和 取消 按钮的表 但表中没有加载任何朋友 IBAction selectFriendsButtonAc
  • 如何在 iframe 加载时向页面添加加载指示器?

    我当前正在创建一个页面 单击链接后 iframe 将插入到 div 中并加载其内容 我使用以下 jQuery 调用来执行此操作 mydiv html 有时会加载源内容very慢慢地 结果看起来什么也没有发生 我希望在 iframe 内容加载
  • Sencha Touch 和远程服务器上的身份验证

    我希望收到您关于使用 PhoneGap 和 Sencha Touch 的应用程序以及带有 Active Directory 的 NET 服务器的身份验证机制的反馈 因此 我们需要在移动设备上存储用户凭据 以便用户每次希望使用该应用程序时都不
  • 从 Kubernetes Python 客户端登录到 GitLab 存储库

    我有一个 Django 应用程序 它使用python 的官方 Kubernetes 客户端 https github com kubernetes client python并且工作正常 但它只部署 正确 公共注册表 有没有办法执行登录后让
  • Grails + Spring Security:无法登录

    我刚刚开始学习Grails和Spring 我已经按照官方教程创建了一个登录系统 但我无法登录 用户名或密码不匹配 我知道 90 的情况下这是由于双重编码或多个数据源 这也导致双重编码 造成的 但我也没有这样做 class BootStrap
  • 如何在之前的 Facebook 身份验证后自动安全地让用户登录?

    用户抱怨他们必须过于频繁地登录 如果身份验证完全基于 Facebook OAuth 那么用户如何在下次访问该页面时自动登录 用户流程示例 用户点击 使用 Facebook 登录 用户通过 Facebook 进行身份验证并被重定向回网站 用户
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag

随机推荐

  • 如何从 SearchView 中移除焦点?

    我想从中删除焦点和文本SearchView in onResume I tried searchView clearFocus 但它不起作用 这是我的 xml 代码
  • Zclip 在 jsfiddle 上工作但不能在本地工作?

    真奇怪 杰斯小提琴 http jsfiddle net sxeCM 4 http jsfiddle net sxeCM 4 在职的 本地具有相同的代码
  • 在呈现的模态视图控制器上按下时允许菜单按钮退出 tvOS 应用程序

    我有一个 tvOS 应用程序 带有UITabBarController作为主故事板的主要入口点 如果用户未登录 则UITabBarController提出了一个LoginViewController模态地 当用户按下 Siri 遥控器上的菜
  • 按频率对字符串数组进行排序的最有效方法

    我有一个字符串数组 String stringArray x y z x x y a 将其订购为更小的最快 最有效的方法是什么Collection按照每个频率的顺序String是和它的频率有关吗 我想使用String作为一个关键HashMa
  • 水平拉伸 ul 以适合 div 的宽度

    对于我网站的主导航 有一个 980px 宽的 div 和一个用于主导航链接的 ul 我试图使导航链接拉伸以均匀地适应 div 的宽度 div style width 100 ul li a href Nav Item a li li a h
  • UITableView 单元格用虚线分隔

    我想将分隔符从 UITableView 更改为虚线 我能找到的只是 UITableViewCellSeparatorStyleBlabla 我可以放别的东西代替吗 我宁愿不使用图像 但如果没有其他方法 Thanks 尝试以下解决方案 sel
  • JPA 和 Hibernate 中 @MapKey、@MapKeyColumn 和 @MapKeyJoinColumn 之间的区别

    As per 休眠文档 http docs jboss org hibernate orm 4 3 manual en US html ch07 html 如果我们想使用 Map 作为实体之间的关联 有多个可用的注释 医生说 或者 映射键被
  • Simplecov 报告忽略 /app 目录中的文件夹

    我使用 simplecov 来测量 Rails 4 0 11 应用程序的覆盖范围 我使用 Ruby 2 0 0 我注意到 app 的一些子文件夹被 simplecov 忽略 我不明白为什么 test helper rb require si
  • X11原子XA_WM_NAME和“_NET_WM_NAME”有什么区别吗?

    与定义的原子有什么区别吗XA WM NAME定义于Xatom h那个人开始使用XInternAtom display NET WM NAME False 编辑 我制作了一个小程序来打印两者的整数值 我得到 NET WM NAME 312 X
  • 使用 LINQ 查询 DataColumnCollection

    我正在尝试对 DataTable 的 Columns 属性执行简单的 LINQ 查询 from c in myDataTable Columns AsQueryable select c ColumnName 然而 我得到的是这样的 找不到
  • 如何生成圆形分布中的随机点

    我想知道如何生成出现在圆形分布中的随机数 我能够在矩形分布中生成随机点 以便这些点在 0 我将如何继续生成圆内的点 以便 x 500 2 y 500 2 import random import math radius of the cir
  • java中将图像向右旋转90度

    我无法将图像向右旋转 90 度 我需要能够在java中单独旋转图像 唯一的事情 不幸的是 我需要在特定点绘制图像 并且没有带有参数的方法 1 单独旋转图像 2 允许我设置 x 和 y 任何帮助表示赞赏 public class Tumble
  • 防止 JavaScript 文件缓存

    我试图阻止浏览器缓存 2 个 JavaScript 文件 我尝试过使用没有成功 这是我的元素代码
  • 最小操作码大小 x86-64 strlen 实现

    我正在研究最小操作码大小x86 64 strlen我的代码高尔夫 二进制可执行文件的实现不应超过一定的大小 为简单起见 请考虑 demoscene 总体思路来自于here http www int80h org strlen 尺寸优化思路来
  • 显式模板专业化

    我不想问这样一个笼统的问题 但下面的代码是显式模板专业化的练习 我不断收到错误 c users documents visual studio 2010 projects template array template array arra
  • 在 C 程序中使用 tcl 和 tk 存根

    我需要一个简单的 C 程序来创建 tcl 解释器 初始化 tcl 和 tk 然后加载给定的 tcl tk 脚本 我想使用 tcl 和 tk 存根 以确保程序将在具有不同版本的 tcl tk 的计算机上运行 我将使用这个程序而不是运行wish
  • 以编程方式清除 iPhone 上的二级缓存

    我创建了一个应用程序 我将从服务器下载图像并将其本地存储在 iPhone 的文件系统上 事情发生得很好 现在的问题是 当我退出应用程序时 我想清除 iPhone 上本地缓存的图像 如何删除 iPhone 上的缓存图像 它使用 iPhone
  • 处理不再存在的枚举值的反序列化

    我有一个枚举 JJJ 它有 3 个值 A B 和 C 在我的程序的早期版本中 它还有一个附加值 D 我希望能够读取由早期版本的程序创建的序列化对象 程序中 但在序列化对象中遇到值为 D 的 JJJ 类型变量时会抛出异常 最理想的情况是 我希
  • 将 JVM 字节码往返于文本表示的故障安全方法

    我正在寻找一种在 JVM 类文件和文本表示之间往返的故障安全方法 一项严格的要求是 只要文本表示形式保持不变 生成的往返 JVM 类文件在功能上与原始 JVM 类文件完全相同 此外 文本表示必须是人类可读和可编辑的 应该可以对文本表示进行小
  • ServiceStack OAuth - 注册而不是登录

    在 servicestack OAuth 实现中 我只看到了自动登录的可能性 例如 脸书账号 但是否能够支持通过 Facebook 登录进行注册过程 我想要的是让用户登录到 facebook 应用程序 然后加载他们的姓名 姓氏和电子邮件 并