使路由仅通过javascript可用

使路由仅通过javascript可用,javascript,php,jquery,laravel,Javascript,Php,Jquery,Laravel,我有一个方法IndexController@search(Request$Request)我用于自动完成字段: 路线: Route::get('/search', 'IndexController@search')->name('index.search'); Javascript: $(function() { $('#terms').autocomplete({ source: 'search' // --> http://myapp/search

我有一个方法
IndexController@search(Request$Request)
我用于自动完成字段:

路线:

Route::get('/search', 'IndexController@search')->name('index.search');
Javascript:

$(function() {
    $('#terms').autocomplete({
        source: 'search' // --> http://myapp/search
    });
});
javascript/jQuery可以按预期工作,但现在可以调用
http://myapp/search
,并访问搜索查询的原始JSON数据。如果可能的话,我想禁止这样做。搜索方法应该只能通过javascript使用


这可能吗?

总有办法绕过它。但在大多数情况下,这将满足您的需求:

if (!request()->ajax()) {
    abort(404);
}

话虽如此,我更关心的是ajax机器人试图抓取内容,而不是人们手动浏览网页

我会说不。如果它可以从JavaScript访问,这意味着它是一种可以被浏览器请求的资源……不是真的,你可以添加措施来尝试和防止它,但最终任何了解Chrome开发工具的人都可以看到请求并进行模拟。感谢您的回复。所以我猜,这是预期的行为,而且网页应该使用的JSON结果完全可以公开访问!?我不认为你应该关心的是,有人通过浏览器访问请求来刮你的页面。如果您有最终用户不需要查看的敏感数据(例如
id
通常),就不要在json中返回它。如果有些敏感数据不应该对所有用户都可用,请使用某种形式的身份验证对其进行保护。但底线是,无论你公开发布什么,总有人能勉强做到——我是说,你是说写
$request->ajax()
。当然,如果您在变量
$request
中有一个请求实例,这也会起作用。我明白了。还有一个
请求
助手(点头。)