当前位置: 首页 > 知识库问答 >
问题:

Spring Security-使用主体登录OAuth/Google后如何检索数据(如电子邮件、姓名、图片等)?

孙佐
2023-03-14

我正在开发一个演示,其中我使用OAuth2登录使用谷歌帐户。我有一个将用户重定向到OAuth/Google登录的索引页面,一旦通过身份验证,我希望被重定向到一个可以显示帐户名称和图片的页面。现在,我返回整个主体数据,但我只想显示姓名和图片。

在这里你可以看到我的控制器,它返回整个本金:

import java.security.Principal;

import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

@RestController
public class Controller {

    //returns the index page
    @GetMapping("/")
    public ModelAndView index() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("index.html");
        return modelAndView;
    }

    //after login, redirects to this page, with user details
    @RequestMapping(value="/user")
    public Principal user(Principal principal) {

        return principal;
    }

}

我真正需要的是获得一些信息,如从谷歌个人资料的姓名和图片,在本金的信息。

我只能通过使用。getName(),但它只是返回一个ID。我也试着这样收邮件,但没用:

@RequestMapping(value="/user")
public Authentication user(OAuth2Authentication authentication) {
        LinkedHashMap<String, Authentication> details = (LinkedHashMap<String, Authentication>) authentication.getUserAuthentication().getDetails();
        return details.get("email");
    }

那么,是否可以通过该主体获取用户数据,或者是否有更好的方法

共有1个答案

东郭凯捷
2023-03-14

这将是一个很长的答案。也许举个例子是有帮助的:

https://github.com/Grauzone/spring-boot-react-oauth2-social-login-demo

 类似资料:
  • 我正在尝试使用Swift从iOS中的google登录API中查找登录帐户的电子邮件。我使用的代码与google开发者说明页面中给出的代码相同。 这是我的密码 description=[NSString stringAnd Format: @"%@ %@ %@ %@ %@ %@", person.display名称,person.gender,person.ageRange.min,person.a

  • 问题内容: 我希望django通过电子邮件而非用户名对用户进行身份验证。一种方法是提供电子邮件值作为用户名值,但我不希望这样。原因是,我有一个,所以我不能有一个。 另一个原因是所有电子邮件都是唯一的,但有时用户名已被使用。因此,我将自动创建用户名为。 我该如何更改才能让Django通过电子邮件进行身份验证? 这就是我创建用户的方式。 这就是我的登录方式。 除了先获取用户名外,登录还有其他方法吗?

  • 我希望django通过电子邮件而不是用户名来验证用户。一种方法是提供电子邮件值作为用户名值,但我不希望这样。原因是,我有一个url

  • Firebase 简单登录提供电子邮件/密码选项,我该如何使用它?从创建用户、为该用户存储数据开始,到登录和注销。

  • 我已经实现了登录用户名或电子邮件在我现有的项目和工程罚款。我想将其扩展为使用用户名、电子邮件或电话登录。我想要一个用户登录用户名,电子邮件或电话号码和密码。 这是我的代码App\Http\Controllers\Auth\LoginController 应用程序\Http\控制器\Auth\注册控制器 注册工作正常,我可以将用户电话存储到用户表中。我已将电子邮件的输入类型更改为views/auth

  • 尝试使用Google云功能和Firebase创建REST身份验证系统。这里的Firebase文档说: 要实现这一点,必须创建一个服务器endpoint,该endpoint接受登录凭据(如用户名和密码),如果凭据有效,则返回一个自定义JWT。 我看到我必须做这样的事情: 但是想知道从登录表单验证电子邮件/密码有效性并获取uid(全部在Cloud Functions中)然后发送到的最佳方法?