我有一个symfony网络应用程序。我想为我的网络应用添加功能,这是一个非常好的API。
如此安静的api和web应用程序,在一个Web应用程序/项目中运行。
我终于成功设置了API和Web规则,但问题是如果我在浏览器中访问,它将返回登录页面,我需要登录1st。没问题,问题是,当我在邮递员或客户端应用程序中测试时。客户端无法获取数据,因为它返回登录页面。
这是我的config.yml:
# Nelmio CORS Configuration
nelmio_cors:
defaults:
allow_credentials: false
allow_origin: ['*']
allow_headers: ['*']
allow_methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']
max_age: 3600
hosts: []
origin_regex: false
# FOSRest Configuration
fos_rest:
body_listener: true
format_listener:
rules:
- { path: '^/api', priorities: ['json'], fallback_format: json, prefer_extension: false }
- { path: '^/', priorities: ['text/html', '*/*'], fallback_format: html, prefer_extension: true }
param_fetcher_listener: true
view:
view_response_listener: 'force'
formats:
json: true
这是我的security.yml
# To get started with security, check out the documentation:
# https://symfony.com/doc/current/security.html
security:
encoders:
AppBundle\Entity\User:
algorithm: bcrypt
# https://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
providers:
db_provider:
entity:
class: AppBundle\Entity\User
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: ~
form_login:
login_path: login
check_path: login
logout:
path: /logout
target: /
# activate different ways to authenticate
# https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate
#http_basic: ~
# https://symfony.com/doc/current/security/form_login_setup.html
#form_login: ~
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/local_registration, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: IS_AUTHENTICATED_FULLY }
这是我的控制者:
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\Controller\FOSRestController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\View\View;
use AppBundle\Entity\User;
class DemoController extends FOSRestController
{
/**
* @Rest\Get("/api/demo")
*/
public function getAction()
{
$data = array("hello" => "world");
// $view = $this->view($data);
return $data;
}
}
问题 现在,当我使用浏览器获取localhost:8000 / api / demo时,我只需登录并获取JSON中的数据,但是当我使用邮递员访问时,返回的是登录页面HTML
如何使用api登录?或者不返回登录页面,但仍然经过身份验证
答案 0 :(得分:0)
看起来你的Symfony用会话cookie检索用户的会话。 因此,当您从浏览器调用API时,您已经过身份验证。
但是在Postman中,默认情况下不会从谷歌浏览器共享cookie(是的,你必须使用谷歌浏览器和邮递员),因为你必须激活邮递员拦截器。之后,邮递员将在给定域名中使用与Google Chrome相同的Cookie进行HTTP调用。
一个好的(和开源的)http客户端是失眠,你可能想尝试一下:D
答案 1 :(得分:0)
您需要为应用的其余部分使用其他一些身份验证系统。 LexikJWTAuthenticationBundle可能是不错的选择。
通常,您会使用Authentication
神秘令牌向您的请求添加Bearer
标头,然后让捆绑执行其余操作。